Streams Średniozaawansowany

Emituj zero lub więcej elementów na wejście bez tworzenia pośrednich strumieni.

✕ 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ć.

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
Stream.mapMulti()
Dostępne

Szeroko dostępne od JDK 16 (marzec 2021)

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.