代码对比
✕ 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 更精细地控制元素发出。
旧方式
flatMap + List
现代方式
mapMulti()
自 JDK
16
难度
中级
JDK 支持
Stream.mapMulti()
可用
自 JDK 16 起广泛可用(2021 年 3 月)
工作原理
mapMulti() 是 flatMap 的命令式替代方案,避免了为每个元素创建中间 Stream 或集合。使用 Consumer 按需发出元素。
相关文档