Java 流式操作 Stream(9) 收集器Collector

 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);

    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章