1. 程式人生 > >JAVA8新特性之 Stream API

JAVA8新特性之 Stream API

重要的 Stream API  : java.util.Stream.*

Stream提供了一種高效且簡易處理資料的方式

注意:1.Stream自己不會儲存元素

           2.對Stream進行操作不會改變資料來源,相反,會產生一個執有結果的新Stream

           3.Stream操作是延遲執行的。只有進行了終止操作才會產生結果

(並行流就是把內容分成多個數據塊,並用不同的執行緒分別處理每個資料塊。在Java8 後,Stream API可以宣告性的通過parallel()與sequential()在並行流與序列流(順序流)之間進行切換

一、Stream操作的三個步驟:1.建立Stream   通過一個數據源(集合或陣列)獲取一個流。(有五種方法)

            2.中間操作      一箇中間操作鏈,對資料進行處理

                                        3.終止操作(終端操作)   一個終止操作,執行中間操作連,併產生結果       

     (中間操作不會執行任何處理,而在終止操作時一次性全部處理,稱為“惰性操作”)

 

二、建立Stream:

          1、用Collection提供的成員方法: Stream<T>   stream   返回一個的是序列流     

                                                                 Stream<T>   parallelStream   返回一個並行流

          2、用Arrays的靜態方法:  Arrays.stream()

          3、使用靜態方法: Stream.of()

          4、使用靜態方法建立無限流:  Stream.iterate()   或        Stream.generate()

 

三、中間操作

        1、篩選與切片       fileter   (Predicate p) 接受Lambda,從流中過濾某些元素

                                       distinct() 通過流所生成元素的hashCode()和equals()去除重複元素

                                      limit(long maxSize)  截斷流,使其元素不超過給定數量

                                      skip(long n) 返回一個扔掉了前n個元素的流。若流中元素不足n個,則返回一個空流。與limit(n)互補。

     2、對映        map(Function f) 接收一個函式作為引數,該函式會被應用到每個元素,並對映成新的元素

                           mapToDouble(ToDoubleFunction f)    接收一個函式作為引數,該函式會被應用到每個元素,併產生一個新的DoubleStream

                          mapToInt(ToIntFunction f)  接收一個函式作為引數,該函式會被應用到每個元素,併產生一個新的Integer

   3、排序    sort()  按自然順序排序(字典順序),產生一個新流

                    sorted(Comparator  c)  按照比較器排序,產生一個新流

 

四、終止操作:  會從流的流水線中產生結果,其結果可以任何不是流的值

            1、查詢與匹配        allMatch(Predicate p) 檢查是否匹配所有元素

                                            anyMatch(Predicate p) 檢查是否至少匹配一個元素

                                            noneMatch(Predicate p) 檢查是否沒有匹配的元素

                                            findFirst()返回第一個元素

                                            findAny()  返回任意當前流中的元素 

                                            count() 返回流中資料的元素個數

                                            max(Comparator c)返回流中最大的值

                                            min(Comparator   c)返回流中最小的值

                                            forEach(Consumer   c) 內部迭代(使用Collection介面需要使用者去做迭代,稱為外部迭代。相反,Stream API 使用內部迭代----它幫你把迭代做了)

          2、歸納        reduce(T  iden , BinaryOperator  b)  可以將流中元素反覆結合起來,得到一個值,返回T

                               reduce(BianaryOperator b)可以將流中元素反覆結合起來,得到一個值。返回

Optional<T>

(備註:map和reduce的連線通常稱為map-reduce模式,因Google用它來進行網路搜尋而出名)

        3、收集         

                       collect(Collector   c)    將流轉化為其他形式,接受一個Collector介面的實現,用於給Stream中的元素做彙總

 

(   Collector 介面中方法的實現決定了如何對流執行收集操作(如收

集到 List、Set、Map)。但是 Collectors 實用類提供了很多靜態
方法,可以方便地建立常見收集器例項 。  )