当前位置: 首页 > java >正文

Java Stream API 终止操作的详细解析

一、终止操作概述

  • 定义:终止操作(Terminal Operations)是 Stream 处理流程的最后一步,触发流的遍历并生成结果,之后流不可再用。
  • 核心特点
    • 触发计算:中间操作(如 filtermap)在终止操作调用时才会执行。
    • 关闭流:流一旦终止,无法再执行其他操作。
    • 返回非流结果:如基本类型、对象、集合或 void

二、常见终止操作分类

1. 遍历与消费
  • forEach(Consumer<T>)
    遍历流中的每个元素,无返回值。

    List<String> list = Arrays.asList("A", "B", "C");
    list.stream().forEach(System.out::println); // 输出 A B C
    
  • forEachOrdered(Consumer<T>)
    在并行流中按顺序遍历元素(牺牲部分性能保证顺序)。

    list.parallelStream().forEachOrdered(System.out::println); // 顺序输出
    

2. 聚合与统计
  • count()
    返回流中元素的总数。

    long count = Stream.of(1, 2, 3).count(); // 3
    
  • max(Comparator<T>) / min(Comparator<T>)
    返回最大/最小元素(返回 Optional<T>)。

    Optional<Integer> max = Stream.of(5, 2, 8).max(Integer::compare); // 8
    
  • sum() / average()
    仅适用于基本类型流(IntStreamLongStreamDoubleStream)。

    int sum = IntStream.of(1, 2, 3).sum(); // 6
    double avg = IntStream.of(1, 2, 3).average().orElse(0); // 2.0
    

3. 匹配与查找
  • anyMatch(Predicate<T>)
    判断是否存在至少一个元素满足条件。

    boolean hasEven = Stream.of(1, 3, 5).anyMatch(n -> n % 2 == 0); // false
    
  • allMatch(Predicate<T>)
    判断所有元素是否满足条件。

    boolean allPositive = Stream.of(1, 2, -3).allMatch(n -> n > 0); // false
    
  • noneMatch(Predicate<T>)
    判断是否没有元素满足条件。

    boolean noEmpty = Stream.of("A", "B").noneMatch(String::isEmpty); // true
    
  • public static void main(String[] args) {//匹配person的名字是否都为”李白“System.out.println(PersonService.getPersons().stream().allMatch(new Predicate<Person>() {@Overridepublic boolean test(Person person) {return person.getName().equals("李白");}}));//匹配名字是否至少有一个为”李白“boolean b = PersonService.getPersons().stream().anyMatch(person -> person.getName().equals("李白"));System.o
http://www.xdnf.cn/news/9380.html

相关文章:

  • QML之Canvas
  • 数组名的大小理解
  • <b> 与 <span> 等行内元素添加 margin-top 或 margin-bottom 不生效问题
  • CarPropertyService 介绍
  • 【FAQ】spring boot 3 集成 nacos
  • pgsql 查看每张表大小
  • 创建vue项目
  • 3D Web轻量化引擎HOOPS Communicator实时协作功能深度解析
  • 小黑黑大模型应用日常摸索中:初次使用langchain智能体调用工具,准备继续深入
  • 题解——相交链表(力扣160 easy)
  • Java研学-MybatisPlus(三)
  • 磁盘管理练习题
  • 《Python基础》第1期:人生苦短,我用Python
  • Java基础 5.27
  • Oracle初识
  • 遗传算法简明指南:思路解析与C++实现
  • C++优先队列(priority_queue)使用详解
  • 计算机系统结构-第四章节-背诵
  • 使用Auto-Coder对js文件进行审计并修复漏洞1.3 1.4 1.5版本
  • BugKu Web渗透之Post
  • Python 实现简易版的文件管理(结合网络编程)
  • linux kernel 内存回收水位线调整方法
  • 第九章 Java基础-集合
  • 鸿蒙OSUniApp 制作简洁的用户个人中心页面#三方框架 #Uniapp
  • 【Springboot+LangChain4j】实现多轮对话,即记忆对话功能
  • v4.0 论文投稿-Latex论文投稿注意事项
  • 基于Alibaba Cloud Linux + 宝塔面板安装 LibreOffice 全攻略流程
  • 怎么实现pid隔离
  • 海信IP810N-72UB0贵州联通原机分区备份包
  • mysql 合集