3 回答

TA貢獻(xiàn)1883條經(jīng)驗(yàn) 獲得超3個(gè)贊
從技術(shù)上講,當(dāng)您這樣做時(shí),Stream reduce不會(huì)提供任何一致的事情。
保證僅通過(guò)關(guān)聯(lián)約化操作提供,而您的保證則不然(它考慮了第一個(gè)操作數(shù),忽略了第二個(gè)操作數(shù)。
測(cè)試代碼時(shí),會(huì)觀察結(jié)果。
當(dāng)試圖對(duì)如何在非并行流中實(shí)現(xiàn)減少進(jìn)行有根據(jù)的猜測(cè)時(shí),這些結(jié)果并不令人驚訝。但是,Stream的文檔無(wú)法保證這些結(jié)果,因?yàn)槟鷽](méi)有遵守要求。
例如,結(jié)果可能是 1 或 2。雖然有點(diǎn)令人費(fèi)解,但它仍然有意義,你是那個(gè)不符合要求的人。

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超5個(gè)贊
讓我們看看這里發(fā)生了什么:
System.out.println((Stream.generate(()->1d).limit(10).
reduce((x,y)-> {
double ret = x+x;
System.out.println(ret);
return ret;
})));
輸出為
2.0
4.0
8.0
16.0
32.0
64.0
128.0
256.0
512.0
Optional[512.0]
因?yàn)槟牧髦杏?10 個(gè)參數(shù)提供給具有默認(rèn)起始值的 reduce。0
由于您正在使用并且您實(shí)際上將結(jié)果加倍9倍,例如在第一個(gè)之后,@ZhenyaM提到:(x, y) -> x+xresult <- result + resultresult <- 0 + 12^9 = 512
添加回答
舉報(bào)