Collections 中级

在单次流遍历中计算两个聚合结果。

✕ Java 8
long count = items.stream().count();
double sum = items.stream()
    .mapToDouble(Item::price)
    .sum();
var result = new Stats(count, sum);
✓ Java 12+
var result = items.stream().collect(
    Collectors.teeing(
        Collectors.counting(),
        Collectors.summingDouble(Item::price),
        Stats::new
    )
);
发现此代码有问题? 告诉我们。

单次遍历

只处理流一次,而非两次。

🧹

无可变状态

无需用于收集中间结果的临时变量。

🧩

可组合

可与其他收集器组合作为下游收集器。

旧方式
两次遍历
现代方式
teeing()
自 JDK
12
难度
中级
Collectors.teeing()
可用

自 JDK 12 起广泛可用(2019 年 3 月)

Collectors.teeing() 将每个元素发送到两个下游收集器,然后将结果合并。不再需要对流进行两次遍历或将中间结果存储在可变变量中。

分享 𝕏 🦋 in