jdk8 reduce
reduce 有3个重载方法
1.接收一个参数 BinaryOperator 的函数式接口 ,返回 Optional 对象
Optional<T> reduce(BinaryOperator<T> accumulator);
BinaryOperator 是函数式接口,需要实现方法
R apply(T t, U u);
2.接收两个参数
T reduce(T identity, BinaryOperator<T> accumulator);
此处多了一个参数 identity ,jkd8 有并行 stream 即 parallStream ,如果使用 strean ,那么指定 identity 将参与结果计算。但是如果使用 parallStream ,计算结果将不一样
identity必须是accumulator函数的一个identity,也就是说必须满足:对于所有的t,都必须满足 accumulator.apply(identity, t) == t
3.接收三个参数
<U> U reduce(U identity, BiFunction<U, ? super T, U> accumulator, BinaryOperator<U> combiner);
第一个参数是返回值类型,第二个参数是计算器,第三个参数是组合器。
第三个参数的作用是将 并行stream 的线程结果进行合并,并得到最终的结果