天天看點

JAVA8 Stream 收集

List<Student> students = Arrays.asList(
            new Student(1,"zhangsan","class1",18,60),
            new Student(2,"lisi","class1",20,59),
            new Student(3,"wangwu","class2",18,100),
            new Student(4,"wangwu","class2",16,100),
            new Student(5,"wangwu","class2",22,100),
            new Student(6,"zhaoliu","class2",18,80));           
*toList List<T> 把流中元素收集到List
 * toSet Set<T> 把流中元素收集到Set
 * toCollection Collection<T> 把流中元素收集到建立的集合
 * counting Long 計算流中元素的個數
 * summingInt Integer 對流中元素的整數屬性求和
 * averagingInt Double 計算流中元素Integer屬性的平均值
 * summarizingInt IntSummaryStatistics 收集流中Integer屬性的統計值。
 * joining String 連接配接流中每個字元串
 * maxBy Optional<T> 根據比較器選擇最大值
 * minBy Optional<T> 根據比較器選擇最小值
 * reducing 歸約産生的類型 從一個作為累加器的初始值
 * 開始,利用BinaryOperator與流中元素逐個結合,進而歸約成單個值
 * inttotal=list.stream().collect(Collectors.reducing(0, Employee::getSalar, Integer::sum));
 * collectingAndThen 轉換函數傳回的類型 包裹另一個收集器,對其結果轉換函數
 * groupingBy Map<K, List<T>> 根據某屬性值對流分組,屬性為K,結果為V
 * partitioningBy Map<Boolean, List<T>> 根據true或false進行分區
       
@Test
    public void test7(){
        List<String> list = students.stream().map(Student::getName).collect(Collectors.toList());
        System.out.println(list);
        students.stream().map(Student::getGrade).collect(Collectors.toCollection(ArrayList::new));
        //counting
        Long count = students.stream().collect(Collectors.counting());
        System.out.println(count);
        //averagingInt
        System.out.println(students.stream().collect(Collectors.averagingInt(Student::getGrade)));
        //groupingBy
        System.out.println(students.stream().collect(Collectors.groupingBy(e->e.getClazz())));
        //joining
        System.out.println(students.stream().map(Student::getName).collect(Collectors.joining("--","begin","end")));
        //collectingAndThen
        Integer size = students.stream().collect(Collectors.collectingAndThen(Collectors.toList(), List::size));
        System.out.println(size);
        //reducing
        System.out.println(students.stream().map(Student::getGrade).collect(Collectors.reducing(Integer::sum)));
    }           

輸出結果為:

JAVA8 Stream 收集

繼續閱讀