3 回答

TA貢獻(xiàn)1873條經(jīng)驗(yàn) 獲得超9個(gè)贊
從技術(shù)上講,當(dāng)您這樣做時(shí),Stream reduce 不會(huì)提供任何一致的操作。
保證僅在關(guān)聯(lián)歸約操作中提供,而您的則不是(它考慮了第一個(gè)操作數(shù)并忽略了第二個(gè)操作數(shù)。)
測(cè)試代碼時(shí),您正在觀察結(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)解,但它仍然是有道理的,而你是不符合要求的人。

TA貢獻(xiàn)1863條經(jīng)驗(yàn) 獲得超2個(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)起始值的reduce0。
由于您正在使用并且實(shí)際上在@ZhenyaM 提到的第一次之后,(x, y) -> x+x結(jié)果加倍了 9 倍以上:result <- result + resultresult <- 0 + 12^9 = 512
添加回答
舉報(bào)