java util stream中的reduce
Optional<T> reduce(BinaryOperator<T> accumulator)
不提供初始值,流的第一个元素作为初始值,返回Optional对象以处理空流情况。
适用于求最大值、最小值等无法确定默认值的场景,需处理Optional结果。
示例Optiona<Integer> max = stream.reduce((a,b) -> a>b?a:b);
T reduce(T identity,BinaryOperator<T> accumulator)
提供初始值(identity),流为空时返回初始值,直接返回结果类型而非Optional。
适用于求、求积等有明确单位元的场景,并行流友好。
示例:int sum = stream.reduce(0,Integer::sum);
<U> U reduce(U identity,BiFunction<U,? super T,U> accumulator,BinaryOperator<U> combiner)
支持类型转换(流元素类型T与己过类型U不同),第三个参数combiner用于并行流中合并子流结果。
适用于需先映射在归约(如统计字符串长度总和)或复杂的并行归约操作。
示例:int len = stream.reduce(0,(sum,str)->sum+str.length(),Integer::sum);
参考
- https://www.bilibili.com/video/BV1VU4y1E7up?vd_source=b7583e4b0c10d8d3dd41b321b5aed22c&p=38&spm_id_from=333.788.player.switch
- https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#reduce-java.util.function.BinaryOperator-
