Collectors.flatMapping()
Użyj flatMapping() do spłaszczania wewnątrz kolektora grupującego.
Porównanie kodu
✕ 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()
)
));
Widzisz problem z tym kodem? Daj nam znać.
Dlaczego nowoczesne podejście wygrywa
Kompozycyjność
Działa jako kolektor downstream wewnątrz groupingBy.
Jeden przebieg
Spłaszczanie i grupowanie wykonujesz w jednym przejściu strumienia.
Zagnieżdżanie
Łatwo łączysz z innymi kolektorami downstream.
Stare podejście
Zagnieżdżone flatMap
Nowoczesne podejście
flatMapping()
Od JDK
9
Poziom trudności
Średniozaawansowany
Wsparcie JDK
Collectors.flatMapping()
Dostępne
Szeroko dostępne od JDK 9 (wrzesień 2017)
Jak to działa
Collectors.flatMapping() stosuje mapowanie one-to-many jako kolektor downstream. To odpowiednik Stream.flatMap() po stronie kolektorów, przydatny np. wewnątrz groupingBy lub partitioningBy.
Powiązana dokumentacja