java8新特性 stream、lambde、optional
阿新 • • 發佈:2018-12-11
一、stream:
stream() − 為集合建立序列流。
parallelStream() − 為集合建立並行流。
forEach
Stream 提供了新的方法 'forEach' 來迭代流中的每個資料。以下程式碼片段使用 forEach 輸出了10個隨機數:
Random random = new Random ( ) ; random . ints ( ) . limit (map(map()就是為了只顯示物件的一部分資訊而準備的)
map 方法用於對映每個元素到對應的結果,以下程式碼片段使用 map 輸出了元素對應的平方數:
List < Integer > numbers = Arrays . asList ( 3 , 2filter
filter 方法用於通過設定的條件過濾出元素。以下程式碼片段使用 filter 方法過濾出空字串:
List < String > strings = Arrays . asList ( " abc " , " " , " bc " , " efg " , " abcd " , " " , " jkl " ) ; // 獲取空字串的數量 int count = strings . stream ( ) . filter ( string -> string . isEmpty ( ) ) . count ( ) ;limit
limit 方法用於獲取指定數量的流。 以下程式碼片段使用 limit 方法打印出 10 條資料:
Random random = new Random ( ) ; random . ints ( ) . limit ( 10 ) . forEach ( System . out :: println ) ;sorted
sorted 方法用於對流進行排序。以下程式碼片段使用 sorted 方法對輸出的 10 個隨機數進行排序:
Random random = new Random ( ) ; random . ints ( ) . limit ( 10 ) . sorted ( ) . forEach ( System . out :: println ) ;並行(parallel)程式
parallelStream 是流並行處理程式的代替方法。以下例項我們使用 parallelStream 來輸出空字串的數量:
List < String > strings = Arrays . asList ( " abc " , " " , " bc " , " efg " , " abcd " , " " , " jkl " ) ; // 獲取空字串的數量 int count = strings . parallelStream ( ) . filter ( string -> string . isEmpty ( ) ) . count ( ) ;我們可以很容易的在順序執行和並行直接切換。
Collectors
Collectors 類實現了很多歸約操作,例如將流轉換成集合和聚合元素。Collectors 可用於返回列表或字串:
List < String > strings = Arrays . asList ( " abc " , " " , " bc " , " efg " , " abcd " , " " , " jkl " ) ; List < String > filtered = strings . stream ( ) . filter ( string -> ! string . isEmpty ( ) ) . collect ( Collectors . toList ( ) ) ; System . out . println ( " 篩選列表: " + filtered ) ; String mergedString = strings . stream ( ) . filter ( string -> ! string . isEmpty ( ) ) . collect ( Collectors . joining ( " , " ) ) ; System . out . println ( " 合併字串: " + mergedString ) ;