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<SalesPerson> 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<Integer> 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<Double> 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<Double> max = sales.stream()
                                    .map(s -> s.getEmployee().getSalary())
                                    .max(Double::compare);
        System.out.println(max.get());
    }

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

    @Test
    public void test09(){
        Optional<SalesPerson> 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

    原文作者:csdn-华仔
    原文地址: https://blog.csdn.net/Hello_World_QWP/article/details/80256842
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞