繼續看看《java8函數式編程》,來看看這個java.util.stream.Collectors類提供了那些靜態的收集器(一種通用的,從流中生成複雜值的結構,只要將她傳給collect方法,全部的流就可使用它了),提供的方法也是挺多的(下面的例子都是臨摹書中的現成例子,腦殼不想動了)。java
裝換成其餘集合:前面介紹了collect(toList()),在流中生成列表,可是人們仍是但願從流中生成其餘值,好比Map或Set,或者你但願定製一個類將你想要的類抽象出來。調用toList或者toSet方法時,不須要指定具體的類型,Stream類庫在背後自動爲你挑選了合適的類型。你若是使用一個特定的集合收集類,能夠指定該集合的類型,使用toCollection來建立集合。sql
裝換成值:以利用收集器讓流生成一個值。maxBy和 minBy容許用戶按某種特定的順序生成一個值。定義了一個比較器,並將比較器傳入 maxBy 收集器,用來找出最大的,minBy也是相似的。還有averagingInt,averagingDouble,averagingLong,summingInt等方法。編程
下面是Collectors中maxBy的實現,由BinaryOperator接口定的方法實現。函數式編程
數據分塊:收集器 partitioningBy,它接受一個流,並將其分紅兩部分(如圖 高級集合類和收集器 ,它使用 Predicate 對象判斷一個元素應該屬於哪一個部分,並根據布爾值返回一 個Map到列表。函數
數據分組:數據分組是一種更天然的分割數據操做,與將數據分紅 ture 和 false 兩部分不一樣,可使 用任意值對數據分組,很像sql中的group by操做吧。對象
字符串:使用 Collectors.joining 收集流中的值,該方法 能夠方便地從一個流獲得一個字符串,容許用戶提供分隔符(用以分隔元素)、前綴和後綴。接口
還有收集器是能夠組合使用的,下面是計算專輯中每一個藝術家的做品數,具體的每一個方法的使用,仍是看官方的文檔吧:文檔
還有上面使用的Artlist::getName,其實就是artList->artlist.getName(),叫作方法引用。字符串
週五要對本身好一點,看今天的比賽錄像去,看看凱爾特人的面具俠!get