Streams Fortgeschritten

Null oder mehr Elemente pro Eingabe ausgeben, ohne Zwischen-Streams zu erstellen.

✕ 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));
    }
);
Problem mit diesem Code entdeckt? Sag uns Bescheid.

Weniger Allokationen

Kein Zwischen-Stream pro Element erstellt.

🎯

Imperativer Stil

Schleifen und Bedingungen direkt verwenden.

📐

Flexibel

Null, eins oder viele Elemente mit voller Kontrolle ausgeben.

Alter Ansatz
flatMap + List
Moderner Ansatz
mapMulti()
Seit JDK
16
Schwierigkeitsgrad
Fortgeschritten
Stream.mapMulti()
Verfügbar

Weitgehend verfügbar seit JDK 16 (März 2021)

mapMulti() ist eine imperative Alternative zu flatMap, die das Erstellen von Zwischen-Stream-Objekten für jedes Element vermeidet. Es ist effizienter, wenn die Abbildung eine kleine Anzahl von Elementen erzeugt.

Teilen 𝕏 🦋 in