Java 流式操作 Stream(9) 收集器Collector
package com.lius.collector;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collector;
import java.util.stream.Collectors;
/**
* <p>Collector收集器</p>
* 1.Collector.supplier();//product return result [R supplier()]
* 2.Collector.accumulator();//將stream 輸入元素進行累加存入返回結果容器裏 [void BiConsumer(param1,param2)]
* 3.Collector.combiner(); //對並行的多個線程累加產生的多個返回結果容器進行合併,合併成一個結果返回容器 [T BinaryOperator(T,T)]
* 4.Collector.finisher();//將最後返回的結果容器處理作爲最終結果返回 [ T Function(param1) ]
*/
public class collectorTest1 {
public static void main(String[] args) {
//創建收集器Collector
Collector<Object, ArrayList<Object>, ArrayList<Object>> coll = Collector.of(ArrayList::new, List::add, (L, R) -> {
L.addAll(R);
return L;
});
coll.supplier();//product return result [R supplier()]
coll.accumulator();//將stream 輸入元素進行累加存入返回結果容器裏 [void BiConsumer(param1,param2)]
coll.combiner(); //對並行的多個線程累加產生的多個返回結果容器進行合併,合併成一個結果返回容器 [T BinaryOperator(T,T)]
coll.finisher();//將最後返回的結果容器處理作爲最終結果返回 [ T Function(param1) ]
//使用收集器
ArrayList<Object> result = Arrays.asList(1, 2, 4, 5, 6, 3, 7, 8, 9).stream().collect(coll);
System.out.println(result);
Map<String, ArrayList<Object>> resultStr = Arrays.asList("1", "3", "5", "8", "9", "11").stream().collect(Collectors.groupingBy(str -> str, Collector.of(ArrayList::new, List::add, (L, R) -> {
L.addAll(R);
return L;
})));
System.out.println(resultStr);
}
}