謹(jǐn)慎使用Stream
- 適當(dāng)?shù)厥褂胹treams API可以讓程序更簡(jiǎn)潔, 但是使用不當(dāng)(過(guò)度使用)可能會(huì)降低可讀性和可維護(hù)性.
- 關(guān)于stream pipeline的可讀性:
- 缺少明確的類(lèi)型時(shí), lambda參數(shù)的良好命名是必要的.
- 使用輔助方法, 提取邏輯并命名.
-
Stream
在處理char
的時(shí)候會(huì)轉(zhuǎn)成int
沥匈,如果在Stream
中處理char
要強(qiáng)轉(zhuǎn) - 相比于
for
循環(huán)捉撮,stream
有兩個(gè)比較大的限制- 代碼塊中的內(nèi)容訪(fǎng)問(wèn)外界都是
final
的 - 只能用
return
實(shí)現(xiàn)continue
的效果,并不能真的停止循環(huán)
- 代碼塊中的內(nèi)容訪(fǎng)問(wèn)外界都是
-
stream
擅長(zhǎng)的事情:- 統(tǒng)一處理元素序列
- 過(guò)濾
- 聯(lián)合元素的運(yùn)算(加, 連接, 算最小值等)
- 將元素序列累積到集合中, 或分組
- 查詢(xún)
思考
-
Stream
相比于for
循環(huán)最大的優(yōu)勢(shì)就是更加的優(yōu)雅汤求,使用鏈?zhǔn)讲僮骺梢允勾a更加整齊 - 使用
Stream
要尤其注意api的很多坑,比如toMap
的key和value都不能是null,不然會(huì)拋NPE - 使用
Strean
的一個(gè)問(wèn)題就是不能回頭訪(fǎng)問(wèn)之前的結(jié)果潘拱,不過(guò)反過(guò)來(lái)這也可以促使我們?nèi)z討是不是一定要依賴(lài)之前的計(jì)算結(jié)果。如果確實(shí)依賴(lài)赋朦,沒(méi)必要用書(shū)里說(shuō)的那些例子篓冲,直接使用for循環(huán)李破。不然很有可能造成代碼可讀性很差