標籤:
在這章中我們將學習Stream API,在JDK 8 中的一項新的特性。為了理解這一章的主題,你需要知道如何使用Lambda運算式和java.util.function裡的預定義的函數式介面。
一個Stream 類似於一個管道,但它裡面運輸的不是水和石油,而是把資料從源頭運輸到目的地。根據傳遞的方式,一個stream可以是並行和並發的。並行的stream運行在多核的CPU的機器上會很有用。
乍一看,一個stream就像是一個集合容器,但是,它不是一個資料結構用來儲存物件,它只是負責移動對象,所以,你不能把它想象成集合對象那樣往它裡面添加資料。
使用stream的主要原因是它支援並行和並發的彙總操作。例如,你可以非常容易地從stream裡面過濾,排序或映射元素。
Stream API的不同的類型在java.util.stream包中。其中Stream介面是這裡面最常用的stream類型。 一個Stream可以傳遞任何類型的對象,同時也有幾個特殊化的Stream:IntStream, LongStream and DoubleStream。他們都來源於BaseStream。
下面的表格展示了一些在Stream介面中常見的方法:
方法 |
描述 |
concat |
懶載入的方式串連兩個stream。返回一個新的stream,他的元素包括兩個stream的所有元素。第一個stream的元素後面緊跟著第二個stram的元素。 |
count |
返回stream裡面元素的個數。 |
empty |
建立並返回一個空的stream。 |
filter |
在stream所有的元素中根據給定的斷言介面返回一個新的stream。 |
forEach |
給stream每個元素執行一個操作。 |
limit |
從當前的stream中根據指定最大元素的個數返回一個新的stream。 |
map |
返回包含了應用於stream的元素的給定的方法的的結果的stream。 |
max |
根據比較子返回stream中最大的元素。 |
min |
根據比較子返回stream中最小的元素。 |
of |
返回一個已經給定了值的stream。 |
reduce |
在stream上使用唯一ID和累加器執行遞減操作。 |
sorted |
返回一個新的使用自然排序的stream。 |
toArray |
返回一個包含stream所有元素的數組。 |
有些stream的方法執行中間過程的操作,有的執行最終的操作。中間過程的操作會把一個stream傳輸到另一個stream中。像filter,Map,sorted等這些方法。
執行最終操作的方法會產生結果或是其他的影響。例如,count,forEach就是執行的最終結果的操作。
中間過程的操作屬於懶載入的方式,他不會真正的執行,只有是執行最終結果的才會真正在源上開始計算。
Upgrading to Java 8——第四章 The Stream API