Java8笔记第六篇(Stream API 的操作->终止操作 )

本文详细介绍了Java8中Stream API的各种终止操作,包括allMatch、anyMatch、noneMatch等判断型操作,findFirst、findAny用于查找的操作,count进行计数,max与min确定最大值和最小值,以及forEach进行遍历。通过具体实例展示了如何运用这些操作来简化集合处理任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录:
第一篇:初探 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.youkuaiyun.com/download/hello_world_qwp/10401249

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TechBro华仔

日拱一卒无有尽,功不唐捐终入海

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值