Stream API簡化了串行或并發(fā)的大批量操作。Stream代表數(shù)據(jù)元素有限或無限的順序,Stream pipeline代表這些元素的一個多級計算常挚。
一個Stream pipeline中包含一個源Stream,接著是0個或者多個中間操作和一個終止操作。Stream pipeline通常是lazy的:直到調(diào)用終止操作時才會開始計算要出。這是這種lazy計算,時無限Stream成為可能农渊。沒有終止操作的Stream pipline將是一個靜默的無操作指令患蹂,因此千萬不能忘記終止操作。
pipline的任何Stream上調(diào)用parallel方法就可以并發(fā)運(yùn)行砸紊,但通常不要這么做传于。
1.Steam使程序變得簡潔清晰,但使用不當(dāng)就會使程序變得混亂(可讀性差)批糟、難以維護(hù)格了。
a.通過仔細(xì)命名lambda參數(shù)可以在沒有顯示類型時提高可讀性
b.通過抽取方法并合理命名能提高可讀性
2.避免使用Stream處理char值。 因為chars()返回的是int徽鼎,必須強(qiáng)制轉(zhuǎn)換盛末。
3.以下情況使用迭代代碼處理弹惦,不要使用stream:
a.需要修改局部變量。lambda只能讀取final變量悄但。
b.需要從外圍方法中return 棠隐、 break、continue外圍循環(huán)檐嚣,或拋出該方法聲明要拋出的受檢異常助泽。
4.以下情況更適合stream:
a.統(tǒng)一轉(zhuǎn)換元素的序列
b.過濾元素的序列
c.利用單個操作(如添加、連接或者計算其最小值)合并元素的順序
d.將元素的序列放到一個集合中嚎京,比如根據(jù)某些公共屬性進(jìn)行分組
e.收縮滿足某些條件的元素的序列
思考:在看書之前嗡贺,一般是遇到過濾、排序鞍帝、分組诫睬、重組集合的情況會使用stream。不用stream 也往往寫著寫著發(fā)現(xiàn)很難寫帕涌,且可讀性差就會放棄使用stream摄凡。實際使用中往往需要迭代和Stream 結(jié)合使用才能使代碼更簡潔清晰。糾結(jié)的時候蚓曼,可以都寫寫亲澡,看下那個版本好,如果互有優(yōu)劣纫版,那可以嘗試取長補(bǔ)短床绪,糅合到一起。