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 第 06 篇 ( Stream API 的操作->终止操作 )

一、Stream API 的操作步骤:

  1. 创建 Stream

  2. 中间操作

3. 终止操作(终端操作)

终止操作:终端操作会从流的流水线生成结果。其结果可以是任何不是流的值,例如: List、 Integer,甚至是 void 。

6.1 终止操作

allMatch(Predicate p) 检查是否匹配所有元素
anyMatch( (Predicate p) ) 检查是否至少匹配一个元素
noneMatch(Predicate p) 检查是否没有匹配所有元素
findFirst() 返回第一个元素
findAny() 返回当前流中的任意元素
count() 返回流中元素总数
max(Comparator c c) ) 返回流中最大值
min(Comparator c c) ) 返回流中最小值
forEach(Consumer c c) ) 内部迭代 ( (用 使用  Collection  接口需要用户去做迭代,称为 外部迭代 。相反, Stream API  使用内部迭代 —— 它帮你把迭代做了) )

6.1.1 准备测试数据

    List<Employee> emps = Arrays.asList(
            new Employee(001, "Emma", 41, 20000, Status.FREE),
            new Employee(002, "Mary", 39, 18000, Status.BUSY),
            new Employee(003, "Allen", 33, 15000, Status.BUSY),
            new Employee(004, "Olivia", 52, 32000, Status.FREE),
            new Employee(005, "Natasha", 27, 13000, Status.BUSY),
            new Employee(006, "Kevin", 25, 10000, Status.FREE),
            new Employee(007, "Haivent", 25, 12000, Status.FREE)
    );

6.1.2 测试终止操作

@Test
    public void test01(){
        // 是否所有员工在繁忙中
        boolean match = emps.stream()
                            .allMatch((e)->e.getStatus().equals(Status.BUSY));
        System.out.println(match);

        // 是否有员工在空闲中
        boolean match2 = emps.stream()
                            .anyMatch((e)->e.getStatus().equals(Status.FREE));
        System.out.println("\n"+match2);

        // 薪资是否没有小于 15000 的员工
        boolean match3 = emps.stream()
                             .noneMatch((e)->e.getSalary() < 15000);
        System.out.println("\n"+match3);
    }

    @Test
    public void test02(){
        // 获取薪资最低的员工信息
        Optional<Employee> first = emps.stream()
                                       .sorted((x,y)->Double.compare(x.getSalary(), y.getSalary()))
                                       .findFirst();
        System.out.println(first.get());

        // 获取任意一个员工信息
        Optional<Employee> any = emps.parallelStream()
                                     .filter((e)->e.getSalary()>15000)
                                     .findAny();
        System.out.println("\n"+any.get());
    }

    @Test
    public void test03(){
        // 获取所有薪资大于 15000 的员工人数
        long count = emps.stream()
                         .filter((x)->x.getSalary() > 15000)
                         .count();
        System.out.println(count);

        // 获取员工中最高的薪资
        Optional<Double> max = emps.stream()
                                   .map(Employee::getSalary)
                                   .max(Double::compare);
        System.out.println("\n"+max.get());

        // 获取薪资最低的员工信息
        Optional<Employee> min = emps.stream()
                                     .min((x,y)->Double.compare(x.getSalary(), y.getSalary()));
        System.out.println("\n"+min.get());
    }

Stream 流是一次性的,一旦终止操作后,则该流不能再次使用

    @Test
    public void test04(){
        Stream<Employee> sorted = emps.stream()
                                      .sorted((x,y)->Double.compare(x.getSalary(), x.getSalary()));
        Optional<Employee> first = sorted.findFirst();
        System.out.println(first.get());

        boolean match = sorted.anyMatch((x)->x.getSalary() > 15000);
        System.out.println("\n"+match);

    }

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值