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))
|