6. Stream常用的中繼操作(Intermediate operations)

6.1 filter() & Predicate

filter()可用來過濾符合條件的元素,至於如何去判斷是否符合,通常就要藉助於實作Predicate函式介面,

例如filter(Object::nonNull)可過濾掉全部的null。

練習:將["Apple", "Asus", "Alibaba", "Orange", "Microsoft", "Google"]拆解為陣列,並找出長度大於5且結尾為e的單字。

6.2 sorted() & Comparator

sorted()可用來對元素做排序,至於如何去比較大小,通常就要藉助於實作Comparator函式介面。

練習:同上一個練習的字串, 拆解為陣列,並依照單字長度由小到大排序。

練習:同上,但改由大到小排序。

練習:打開exec06.SortedCustomers.java,將顧客依姓名(自然排序)、年齡(大->小)、姓別(male->female)做排序。

6.3 map() & Function

map()可用來對元素做轉換,至於如何去轉換,通常就要藉助於實作Function函式介面。

練習:同上一個練習的字串, 拆解為陣列,並將各個單字轉換為單字長度的數字。

練習:同上一個練習的字串, 拆解為陣列,並將各個單字轉換為大寫。

6.4 flatmap()

flatmap()可用來對型態為Stream的元素做「拆解後組合」的動作,例如[...[y, o, u, r], [d, o, g],...]的Stream可以再次拆解組合為[...y, o, u, r, d, o, g...],至於如何去轉換,通常就要藉助於實作Function函式介面。

練習:同上一個練習的字串, 拆解為陣列,並將各個單字再次拆解為字母。(提示:可使用flatMapToInt()、String.chars()及mapToObj())