Collectors.reducing()可用于将流中的元素聚合为一个值,其接受三个参数:初始值、映射函数和归约函数。它可以将所有元素转换为一个临时数据结构,然后再使用归约函数将它们合并为一个值。例如,可以使用Collectors.reducing()计算流中所有元素的和,如下所示:
int sum = list.stream()
.collect(Collectors.reducing(0, (a, b) -> a + b));
另一个应用场景是对流中的对象进行二元操作,例如取最小值或最大值,可以使用归约函数和Comparator实现,如下所示:
Person oldest = people.stream()
.collect(Collectors.reducing((p1,p2) -> p1.getAge() > p2.getAge() ? p1 : p2))
.orElse(null);
这将返回年龄最大的Person对象。