12. Java8新特性_Stream_归约与收集

 

 

package com.sggtwelve;

import com.sggthree.Employee;
import org.junit.Test;

import java.util.*;
import java.util.stream.Collectors;

public class TestStreamAPI5 {
    /*
    规约:reduce(BinaryOperator)- 可以将流中元素反复结合起来,得到一个值
     */
    List<Employee> employees = Arrays.asList(
            new Employee("张三",18,9999.99, Employee.Status.FREE),
            new Employee("李四",58,5555.55, Employee.Status.BUSY),
            new Employee("王五",26,3333.33, Employee.Status.VOCATION),
            new Employee("赵六",36,6666.66, Employee.Status.FREE),
            new Employee("田七",12,8888.88, Employee.Status.BUSY),
            new Employee("田七",12,8888.88, Employee.Status.BUSY)
    );

    @Test
    public void test1(){
        List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
        Integer sum = list.stream().reduce(0,(x,y) -> x+y);
        System.out.println(sum);
        System.out.println("--------------------------------");

        Optional<Double> op = employees.stream()
                .map(Employee::getMoney)
                .reduce(Double::sum);
        System.out.println(op.get());
    }

    /*
    收集:collect-将流转换为其他形式。接收一个Collector接口的实现,用于给Stream中元素做汇总的方法
     1.总数
     2.平均值
     3.总和
     4.最大值
     5.最小值
     =============
     6.分组
     =============
     7.多级分组
     =============
     8.分区(满足条件一个区,不满足条件一个区)
     */
    @Test
    public void test2(){
        List<String> list = employees.stream()
                .map(Employee::getName)
                .collect(Collectors.toList());
        list.forEach(System.out::println);
        System.out.println("================toList结束============");

        Set<String> set = employees.stream()
                .map(Employee::getName)
                .collect(Collectors.toSet());
        set.forEach(System.out::println);
        System.out.println("================toSet结束============");

        HashSet<String> hashSet =  employees.stream()
                .map(Employee::getName)
                .collect(Collectors.toCollection(HashSet::new));
        hashSet.forEach(System.out::println);
        System.out.println("================toCollection结束============");
    }

    @Test
    public void test3(){
        //总数
       Long count = employees.stream()
               .collect(Collectors.counting());
        System.out.println(count);

        //平均值
       Double money =  employees.stream()
                .collect(Collectors.averagingDouble(Employee::getMoney));
        System.out.println(money);

        //总和
        Double moneySum = employees.stream()
                .collect(Collectors.summingDouble(Employee::getMoney));
        System.out.println(moneySum);

        //最大值
        Optional<Employee> optionalEmployee = employees.stream()
                .collect(Collectors.maxBy((e1,e2) -> Double.compare(e1.getMoney(),e2.getMoney())));
        System.out.println(optionalEmployee.get());

        //最小值
        Optional<Double> min = employees.stream()
                .map(Employee::getMoney)
                .collect(Collectors.minBy(Double::compareTo));
        System.out.println(min);
    }

}

 

posted @ 2020-02-06 14:59  李清欣  阅读(328)  评论(0编辑  收藏  举报