Collectors.flatMapping()
flatMapping()を使ってグルーピングコレクター内でフラット化する。
コード比較
✕ Java 8
// Flatten within a grouping collector
// Required complex custom collector
Map<String, Set<String>> tagsByDept =
// no clean way in Java 8
✓ Java 9+
var tagsByDept = employees.stream()
.collect(groupingBy(
Emp::dept,
flatMapping(
e -> e.tags().stream(),
toSet()
)
));
このコードに問題がありますか? お知らせください。
モダンな方法が優れている理由
組み合わせ可能
groupingBy内の下流コレクターとして動作します。
シングルパス
単一のストリームトラバーサルでフラット化とグルーピングを実現します。
ネスト可能
他の下流コレクターと組み合わせられます。
旧来のアプローチ
ネストされたflatMap
モダンなアプローチ
flatMapping()
JDKバージョン
9
難易度
中級
JDKサポート
Collectors.flatMapping()
利用可能
JDK 9(2017年9月)以降、広く利用可能
仕組み
Collectors.flatMapping()は下流コレクターとして1対多マッピングを適用します。Stream.flatMap()のコレクター版で、groupingByやpartitioningByの内部で役立ちます。
関連ドキュメント