Java8
stream
Java 8 - Stream
2018/12/22 10:45:53
0
206
Java 8 - Stream
簡介 |
了解Java 8 Streams與運用方式 |
作者 |
Tarcus Wu |
淺談Stream
Stream為Java8新增的API,主要的功用,就是針對Collections, Arrays, I/O resources做特定化的操作,比如說想要針對某個OutStream的內容的某些byte做過濾,想要針對Collections做排序,想要取得Array的狀態(ex:最大值、最小值、平均值等)
Stream 的好處有:
1. 不同的類型,統一操作方式了。
2. 某些操作本身就已依序存取內容,不用自己寫依序取值的程式
3. 操作過程是一連貫的,比如:Collection做完filter值之後,想要再做排序,再做distinct,這三個動作在一行程式碼就可以全部處理完。
使用介紹
1. forEach
依序執行,執行後不會有回傳值

2. map
依序執行,但執行結果會回存Stream

上例為每個students字串的尾號加入” Sir”
3. filter
過濾符合條件的才留著

上例操作為,保留有a字母的名字,將其尾部加入” Sir”,然後依序印出
4. sorted

5. Collectors

6. Statistics

Stream 可以執行一系列的操作,可以使用循序運算(sequential)也可以使用並行運算(parallel)。Stream 用起來很像 Builder 模式,操作是以一個接一個的方式串起來,因為在設計上有考量到效率,所以每個 stream 方法回傳的值有兩種,並且行為也不同。
當 stream 的方法回傳的值是 Stream 型別時,並不會實際去執行運算,而是當該方法回傳除了 Stream 型別以外的值時(包含void),才真正執行運算。所以要記住 stream 方法的串接規則,中間串接的永遠是回傳 Stream 型別的方法,只有最後一個才是串接傳回某個非 Stream 型別的值的方法。在 API 文件中,屬於終止操作的方法,會有「 This is a terminal operation. 」這樣的標示,表示這個方法只能串接在最後一個。
Stream作為Java 8中最明顯的變革之一,若能有效運用,不但可以高度簡化程式碼,還能有效提高效能以及程式可讀性。