Java8笔记第八篇(Stream API 的综合练习)

目录:
第一篇:初探 java8 第 01 篇( Lambda与Stream API初识 )
第二篇:深入 java8 第 02 篇( Lambda表达式基础语法 )
第三篇:深入 java8 第 03 篇( 函数式接口,常见的4个函数式接口 )
第四篇:深入 java8 第 04 篇( 方法引用与构造器引用 )
第五篇:深入 java8 第 05 篇( Stream API 的操作->创建及中间操作 )
第六篇:深入 java8 第 06 篇( Stream API 的操作->终止操作 )
第七篇:深入 java8 第 07 篇( Stream API 的操作->规约、收集 )
第八篇:深入 java8 第 08 篇( Stream API 的综合练习 )
第九篇:深入 java8 第 09 篇( Fork/Join 框架的使用及其优势 )
第十篇:深入 java8 第 10 篇( 时间新特新 -> DateTimeFormatter 解析与格式化 )
第十一篇:深入 java8 第 11 篇( 带时区的时间或日期)
第十二篇:深入 java8 第 12 篇(接口中的默认方法与静态方法 )
第十三篇:深入 java8 第 13 篇( 其他新特性 -> Optional 类/重复注解与类型注解 )

深入 java8 第 08 篇 ( Stream API 的综合练习 )

8.1 Stream API 的相关练习
8.1.1 准备测试数据

    private List sales = null;
    private Integer[] num = new Integer[]{1,2,3,4,5,6,};

    @Before
    public void Before(){
        Employee emma = new Employee(001, "Emma", 41, 20000, Status.FREE);
        Employee Mary = new Employee(002, "Mary", 39, 18000, Status.BUSY);
        Employee Allen = new Employee(003, "Allen", 33, 15000, Status.BUSY);
        Employee Olivia = new Employee(004, "Olivia", 52, 32000, Status.FREE);
        Employee Natasha = new Employee(005, "Natasha", 27, 13000, Status.BUSY);
        Employee Kevin = new Employee(006, "Kevin", 25, 10000, Status.FREE);
        Employee Haivent = new Employee(007, "Haivent", 25, 12000, Status.FREE);

        sales = Arrays.asList(
            new SalesPerson(emma, "ChengDu", "2005"),
            new SalesPerson(Mary, "ShangHai", "2010"),
            new SalesPerson(Allen, "ShangHai", "2005"),
            new SalesPerson(Olivia, "ShenZhen", "2006"),
            new SalesPerson(Natasha, "ChengDu", "2008"),
            new SalesPerson(Kevin, "ChengDu", "2005"),
            new SalesPerson(Haivent, "BeiJing", "2005")
        );
    }

8.1.2 求的一个整数数组列表的平方根

    @Test
    public void test01(){
        Arrays.stream(num)
            .map((e) -> e * e )
            .forEach(System.out::println);
    }

8.1.3 使用 reduce 求出员工总人数

    @Test
    public void test02(){
        Optional reduce = sales.stream()
                                        .map((e)->1)
                                        .reduce(Integer::sum);

        System.out.println(reduce.get());
    }

8.1.4 筛选出 2005 年入职的员工,并按薪资从低到高排序

    @Test
    public void test03(){
        sales.stream()
             .filter((s)->s.getEntryYear() == 2005+"")
             .sorted((x,y) -> Double.compare(x.getEmployee().getSalary(), y.getEmployee().getSalary()))
             .forEach(System.out::println);
    }

8.1.5 该公司的员工都分布与那些城市,并排序

    @Test
    public void test04(){
        sales.stream()
             .map((s) -> s.getAddress())
             .distinct()
             .sorted()
             .forEach(System.out::println);
    }

8.1.6 获取所有员工姓名,并按首字母排序

    @Test
    public void test05(){
        sales.stream()
             .map((s) -> s.getEmployee().getName())
             .sorted()
             .forEach(System.out::print);

        // 通过 reduce 进行反复结合,并返回一个字符串
        System.out.println();
        String reduce = sales.stream()
                             .map( e -> e.getEmployee().getName())
                             .sorted()
                             .reduce("",String::concat);
        System.out.println("\n"+reduce);

        System.out.println();
        sales.stream()
             .map( s -> s.getEmployee().getName())
             .flatMap(StreamExercise::filterCharacter)
             .sorted((x,y) -> x.compareTo(y))
             .forEach(System.out::print);

    }

    private static Stream<Character> filterCharacter(String str){
        List<Character> list = new ArrayList<>();

        for (Character ch : str.toCharArray()) {
            list.add(ch);
        }
        return list.stream();
    }

8.1.7 查看是否有成都的员工

    @Test
    public void test06(){
        boolean anyMatch = sales.stream()
                                 .anyMatch( s -> s.getAddress().equals("ChengDu"));
        System.out.println(anyMatch);
    }

8.1.8 获取所有成都的员工的薪资总和

    @Test
    public void test07(){
        Optional reduce = sales.stream()
                                       .filter( s -> s.getAddress().equals("ChengDu"))
                                       .map( s -> s.getEmployee().getSalary())
                                       .reduce(Double::sum);

        System.out.println(reduce.get());
    }

8.1.9 获取公司中薪资最高的薪资

    @Test
    public void test08(){
        Optional max = sales.stream()
                                    .map(s -> s.getEmployee().getSalary())
                                    .max(Double::compare);
        System.out.println(max.get());
    }

8.1.10 获取公司中薪资最低的员工信息

    @Test
    public void test09(){
        Optional min = sales.stream()
                                         .min((x,y) -> Double.compare(x.getEmployee().getSalary(), y.getEmployee().getSalary()));
        System.out.println(min.get());
    }

源码下载地址:https://download.csdn.net/download/hello_world_qwp/10401249

你可能感兴趣的:(Java,JDK-1.8,新特性)