Java8中用法優(yōu)雅的Stream
首先,不可否認,stream絕對是優(yōu)雅的代名詞,無論是其串行調用方式,還是其api的強大能力,都給予了程序員一項特殊技能:高效、簡潔。
但事情并非絕對,但從性能上來說,stream真的比傳統(tǒng)迭代更優(yōu)嗎?其實不然,還是要依據(jù)實際情況來看待問題。
在極少數(shù)量的迭代次數(shù)下,其實看不出性能效果的差異,固后面所說的幾點都是依賴大量數(shù)據(jù)迭代的前提之下。

具體分為以下幾點談談:
1、無論什么程序,都要跑在載體上,而常見的載體就是服務器,那么,提到這就很容易聯(lián)想到,CPU的處理能力,直接影響到性能問題。
如果只是單核cpu,那么還是推薦傳統(tǒng)迭代,a)實際測試效果來看,stream性能要明顯差于for循環(huán)之類的傳統(tǒng)處理方式,尤其在單核cpu時,千萬不要使用stream的并線處理,原因是并行處理時還有另外一項開銷,就是上下文線程切換,而此時只有單核cpu,你說這是不是“沒事找事”;
b)當cpu是多核時,并且隨著核數(shù)的增加,這時,stream的優(yōu)勢才能逐漸顯示出來,畢竟并行處理還是由于串行的。
2、事情不是絕對,不是所有情況下,串行處理時stream都不如傳統(tǒng)迭代。比如在復雜對象的處理時(常見的有訂單對象,里面包含很多信息),經(jīng)測試結果發(fā)現(xiàn),stream性能還是由于普通迭代的,那更不用說,在多核cpu下的并行處理了,此處再次強調,不要在單核下使用串行,你會發(fā)現(xiàn)性能及其查!
3、最后提一點個人經(jīng)歷,在使用并行stream時,要謹慎對待迭代處理中進行多外部接口調用,可能你會發(fā)現(xiàn)并行后因為上下文線程切換帶來的開銷反而不一定性能更優(yōu)于串行,還會給系統(tǒng)穩(wěn)定性帶來一定影響。
最后總結一下,處于代碼整潔上考慮,stream還是有明顯優(yōu)勢的,但是在性能上,大家還是要依據(jù)實際情況來做出合理選擇,這樣才能寫出最“優(yōu)雅”的代碼。

