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

流式编程终端操作

流式编程终端操作

太棒了!掌握终端操作是流式编程的“最后一公里”,它们是触发流执行的关键,决定了流的最终输出形式。下面我会系统讲解常用终端操作,包括用法、场景和注意事项,帮你彻底吃透!

一、终端操作的核心特点

  • 触发执行:所有中间操作(如filtermap)只有在终端操作被调用时才会真正执行(惰性执行的体现)。
  • 消费流:终端操作执行后,流会被“消费”,无法再次使用(否则会抛IllegalStateException)。
  • 返回具体结果:终端操作返回非Stream类型的结果(如集合、数值、布尔值等)。

二、常用终端操作分类详解

1. 收集结果:collect(Collector<T, A, R>)

最常用的终端操作,将流转换为集合、映射或其他自定义类型,灵活度极高。

(1)转集合(基础用法)
List<String> list = Arrays.asList("apple", "banana");// 转List(默认ArrayList)
List<String> resultList = list.stream().collect(Collectors.toList());// 转Set(去重,默认HashSet)
Set<String> resultSet = list.stream().collect(Collectors.toSet());// 转具体实现类(如LinkedList保持顺序)
List<String> linkedList = list.stream().collect(Collectors.toCollection(LinkedList::new));
(2)分组与分区(进阶用法)
  • 分组(groupingBy:按某个字段将元素分组为Map<分组键, List<元素>>

    List<User> users = Arrays.asList(new User("张三", 20, "男"),new User("李四", 25, "男"),new User("王五", 22, "女")
    );// 按性别分组:Map<String, List<User>>
    Map<String, List<User>> groupByGender = users.stream().collect(Collectors.groupingBy(User::getGender));
    // 结果:{"男": [张三, 李四], "女": [王五]}
    
  • 分区(partitioningBy:按布尔条件分为两组(Map<Boolean, List<元素>>),是分组的特殊情况。

    // 按年龄是否≥22分区
    Map<Boolean, List<User>> partitionByAge = users.stream().collect(Collectors.partitioningBy(u -> u.
http://www.xdnf.cn/news/1224127.html

相关文章:

  • HarmonyOS】鸿蒙应用开发中常用的三方库介绍和使用示例
  • Linux选择
  • 自建rustdesk服务器过程记录
  • 嵌入式学习笔记-MCU阶段--DAY09
  • Java HTTPS 请求失败排查与证书导入全过程
  • 外卖“0元购”退场后,即时零售大战才刚开始
  • 开源医院信息管理系统:基于若依框架的智慧医疗解决方案
  • Vue项目使用ssh2-sftp-client实现打包自动上传到服务器(完整教程)
  • Meta合成孔径波导全息术新进展,微美全息加速AI+AR全息技术融合稳步前行
  • 常见框架漏洞
  • Node.js的用途和安装方法
  • Windows11 WSL安装Ubntu22.04,交叉编译C语言应用程序
  • UE5 动态扫描波
  • 汽车EDI:Vitesco EDI 项目案例
  • Vue与Ajax快速入门
  • 「一键召唤 007」:开源多智能体 JoyAgent-JDGenie 如何让你的 AI 产品从 Demo 到 真香 只差 Ctrl+C / Ctrl+V?
  • 微波(Microwave)与毫米波(Millimeter wave)简介
  • ansible简单playbook剧本例子2
  • flutter release调试插件
  • 32. flex 的子元素可以浮动吗
  • CMake Debug/Release配置生成器表达式解析
  • etcd 的安装与使用
  • Ubuntu 24.04.2 LTS 安装mysql8.0.36保姆级教程(从安装到远程连接)
  • 大模型微调与部署课程笔记
  • 详解Python标准库之文件格式
  • Redis学习-----Redis的基本数据类型
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘altair’问题
  • S7-1200 /1500 PLC 进阶技巧:组织块(OB1、OB10)理论到实战
  • 对于前端闭包的详细理解
  • java8学习笔记-Stream流