Java8 stream

Java 8 - Stream

Tarcus Wu 2018/12/22 10:45:53
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中最明顯的變革之一,若能有效運用,不但可以高度簡化程式碼,還能有效提高效能以及程式可讀性。
 
Tarcus Wu