Stream.mapMulti()
Emituj zero lub więcej elementów na wejście bez tworzenia pośrednich strumieni.
Porównanie kodu
✕ Java 8
stream.flatMap(order ->
order.items().stream()
.map(item -> new OrderItem(
order.id(), item)
)
);
✓ Java 16+
stream.<OrderItem>mapMulti(
(order, downstream) -> {
for (var item : order.items())
downstream.accept(
new OrderItem(order.id(), item));
}
);
Widzisz problem z tym kodem? Daj nam znać.
Dlaczego nowoczesne podejście wygrywa
Mniej alokacji
Brak tworzenia pośredniego Stream na element.
Styl imperatywny
Używaj pętli i warunków bezpośrednio.
Elastyczny
Emituj zero, jeden lub wiele elementów z pełną kontrolą.
Stare podejście
flatMap + List
Nowoczesne podejście
mapMulti()
Od JDK
16
Poziom trudności
Średniozaawansowany
Wsparcie JDK
Stream.mapMulti()
Dostępne
Szeroko dostępne od JDK 16 (marzec 2021)
Jak to działa
mapMulti() jest imperatywną alternatywą dla flatMap, która unika tworzenia pośrednich obiektów Stream dla każdego elementu. Jest bardziej efektywna gdy mapowanie produkuje małą liczbę elementów.
Powiązana dokumentacja
Dowód