Streams 中級

中間ストリームを作成せずに入力ごとに0個以上の要素を出力する。

✕ 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が作成されません。

🎯

命令型スタイル

ループや条件分岐を直接使用できます。

📐

柔軟

完全な制御で0個、1個、または複数の要素を出力できます。

旧来のアプローチ
flatMap+List
モダンなアプローチ
mapMulti()
JDKバージョン
16
難易度
中級
Stream.mapMulti()
利用可能

JDK 16(2021年3月)以降、広く利用可能

mapMulti()は、各要素に中間Streamオブジェクトを作成しないflatMapの命令型代替手段です。マッピングが少数の要素を生成する場合にはより効率的です。

共有 𝕏 🦋 in