Stream.mapMulti()
中間ストリームを作成せずに入力ごとに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
難易度
中級
JDKサポート
Stream.mapMulti()
利用可能
JDK 16(2021年3月)以降、広く利用可能
仕組み
mapMulti()は、各要素に中間Streamオブジェクトを作成しないflatMapの命令型代替手段です。マッピングが少数の要素を生成する場合にはより効率的です。
関連ドキュメント