Streams Средний

Вывод нуля или более элементов на входной элемент без создания промежуточных Stream.

✕ 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));
    }
);
Заметили проблему в этом коде? Сообщите нам.

Меньше аллокаций

Не создаётся промежуточный Stream для каждого элемента.

🎯

Императивный стиль

Использование циклов и условий напрямую.

📐

Гибкий

Вывод нуля, одного или нескольких элементов с полным контролем.

Старый подход
flatMap + List
Современный подход
mapMulti()
Начиная с JDK
16
Сложность
Средний
Stream.mapMulti()
Доступно

Широко доступно с JDK 16 (март 2021)

mapMulti() — императивная альтернатива flatMap, которая избегает создания промежуточных объектов Stream для каждого элемента. Эффективнее, когда отображение порождает небольшое количество элементов.