Lambda已經是JAVA 8的一個標準,在物件集合的處理方面,它新增一個Stream(java.util.stream.Stream)來操作,
- 內部與外部迭代
外部迭代:一般我們要存取物件集合我們會實作Iterable來存取一個個物件,例如我們想要讀取員工的姓名
for(Person person: persons){ System.out.print(person.getName()); }
問題:
(1) 它限制管理控制流程機會,不能利用並行、懶惰載入來得到更好的效能,這樣就不能充分使用多核心CPU
(2) for-each循環是順序的,並且必須按照集合指定的順序處理元素。 (3) 編譯無法進行指令優化。內部迭代:可以使用並行、延遲載入等更好的方式來˙改善效能
persons.forEach( person -> person.getName())
- Stream
Java提供Stream物件,它跟collection的不同在於可以使用循序或是並行運算。Stream 提供 filter、sort、map 的操作功能。
- Stream 和 Collection差別
(1) 當你Collections.sort(list)會改變原list排序,但是list.stream().sorted()會複製一份,原list保持不變。
(2) stream不會儲存元素,只透過計算管道得傳輸物件
(3) 延遲搜尋(lazying-seeking)透過 filter、map、sort等不會馬上執行,會決定最佳的執行順序並檢查滿足的要求元素就會返回。
(4)平行運算(parallel): 使用多核心的功能
Stream無法儲存,所以需要使用Collectors集合完成資料儲存,下面會介紹stream to list 、stream to map 和stream to set三種方式。
stream to List
將persons處理完的物件結合儲存到List集合的格式
List list2 = list.stream().filter(p -> p.getAge(
留言
張貼留言