3 回答

TA貢獻1883條經驗 獲得超3個贊
從技術上講,當您這樣做時,Stream reduce不會提供任何一致的事情。
保證僅通過關聯約化操作提供,而您的保證則不然(它考慮了第一個操作數,忽略了第二個操作數。
測試代碼時,會觀察結果。
當試圖對如何在非并行流中實現減少進行有根據的猜測時,這些結果并不令人驚訝。但是,Stream的文檔無法保證這些結果,因為您沒有遵守要求。
例如,結果可能是 1 或 2。雖然有點令人費解,但它仍然有意義,你是那個不符合要求的人。

TA貢獻1821條經驗 獲得超5個贊
讓我們看看這里發生了什么:
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]
因為您的流中有 10 個參數提供給具有默認起始值的 reduce。0
由于您正在使用并且您實際上將結果加倍9倍,例如在第一個之后,@ZhenyaM提到:(x, y) -> x+xresult <- result + resultresult <- 0 + 12^9 = 512
添加回答
舉報