T result = identity; java
for (T element : this stream) 多线程
result = accumulator.apply(result, element) app
return result;
框架
计算1,2,3,4,5 的和,而且初始值为3
也就是计算3+1+2+3+4+5
|
结果从新做为一个参数,不断地参与到运算之中,直到最后结束
|
Stream的一个参数和两个参数的方法的基本逻辑都是如此
差异仅仅在于一个参数的是result R = T1 ,而后再继续与剩下的元素参与运算
|
与两个参数的reduce不一样的地方在于类型
双参数的返回类型为T Stream类型为T
三参数的返回类型为U Stream类型为T 有了更大的发挥空间 T可能为U 也可能不是U
|
第一点:identity
的值对于合并运算combiner来讲必须是一个恒等式,也就是说对于任意的u, combiner(identity,u) 和u是相同的
从咱们上面的并行处理流程能够看得出来,这个result 的初始identity 对于每个分支都是参与运算的! |
场景
假设说4个元素 1,2,3,4 须要运算
此时假设已经 1,2,3 三组数据已经运算结束,立刻要同第四组运算
若是是并行,咱们假定1,2,3 在一个分支 4单独在另外一分支
|
并行时
U为已经计算好的1,2,3后的结果 接下来要与另外一组的4 合并
T4则是identity与T参与运算
上面的图就是
combiner.apply(u, accumulator.apply(identity, t))
|