Streams 中级

每个输入元素发出零个或多个元素,无需创建中间流。

✕ 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
难度
中级
Stream.mapMulti()
可用

自 JDK 16 起广泛可用(2021 年 3 月)

mapMulti() 是 flatMap 的命令式替代方案,避免了为每个元素创建中间 Stream 或集合。使用 Consumer 按需发出元素。

分享 𝕏 🦋 in