news 2026/6/23 17:52:06

271. Java Stream API - 理解 Java Stream 的流水线模型:中间操作 vs 终端操作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
271. Java Stream API - 理解 Java Stream 的流水线模型:中间操作 vs 终端操作

文章目录

  • 271. Java Stream API - 理解 Java Stream 的流水线模型:中间操作 vs 终端操作
      • 🧱 中间操作(`Intermediate Operation`):搭建流水线,不启动
      • 🔚 终端操作(Terminal Operation):触发流水线,处理数据
      • 🔁 串联多个中间操作
    • ⚠️ 常见误区:一个 Stream 只能使用一次!
      • 🛠 正确方式:**复用数据源,不复用 Stream 对象**
    • 🎯 中间 vs 终端操作对比总结
    • 💡 比喻辅助记忆:
    • 📌 补充建议:可练习的小题目

271. Java Stream API - 理解 Java Stream 的流水线模型:中间操作 vs 终端操作

JavaStream API中,我们构建的是一个“流水线式的数据处理过程”,就像搭建一条工厂生产线:

  • 每一道工序是一个中间操作(intermediate operation
  • 最后一道是一个终端操作(terminal operation,它才启动整条流水线。

🧱 中间操作(Intermediate Operation):搭建流水线,不启动

定义:一个方法返回一个Stream,就是一个中间操作。
作用:添加一个“处理环节”,但本身不触发数据处理。

Stream<String>stream=List.of("a","bb","ccc").stream();Stream<Integer>lengths=stream.map(str->str.length());// 中间操作

✅ 你只是“配置”了处理流程,没有处理数据。就像装了一个“长度计算”的机械臂,还没开电源。


🔚 终端操作(Terminal Operation):触发流水线,处理数据

定义:一个方法返回的不是Stream(或是void),那就是终端操作。
作用:触发数据从源头一个个“通过中间操作”,并产出结果。

inttotal=List.of("a","bb","ccc").stream().map(String::length)// 中间操作.reduce(0,Integer::sum);// 终端操作System.out.println("总长度 = "+total);// 输出 6

✅ 数据此时才真正流过map,然后被reduce聚合求和。


🔁 串联多个中间操作

varresult=List.of("apple","banana","avocado").stream().filter(s->s.startsWith("a"))// 过滤出以 a 开头的.map(String::toUpperCase)// 转大写.sorted()// 排序.toList();// 终端操作:生成结果列表System.out.println(result);// 输出: [APPLE, AVOCADO]

📌 注意:这些.filter(),.map(),.sorted()每一步都只是排流程,只有.toList()才触发执行


⚠️ 常见误区:一个 Stream 只能使用一次!

varstream=Stream.of(1,2,3,4);// 第一次使用,合法varmapped=stream.map(i->i+1);// 第二次使用,❌ 非法!stream 已经用过varlist=stream.toList();// 会抛 IllegalStateException

💥 错误信息:

java.lang.IllegalStateException:stream has already been operated upon or closed

🛠 正确方式:复用数据源,不复用 Stream 对象

// 正确做法:重新从集合创建新 Streamvarsource=List.of(1,2,3,4);varmapped=source.stream().map(i->i+1).toList();// ✅varfiltered=source.stream().filter(i->i%2==0).toList();// ✅

🎯 中间 vs 终端操作对比总结

操作类型特征描述是否触发处理返回值类型示例方法
中间操作构建流水线,返回新的 Stream❌ 否Streammap,filter,sorted
终端操作启动流水线,返回结果或副作用✅ 是Stream类型collect,toList,reduce,forEach

💡 比喻辅助记忆:

  • 中间操作:就像在工厂安装传送带上的“加工模块”,还没有开机。
  • 终端操作:按下启动按钮,产品才真正开始加工和流转。

📌 补充建议:可练习的小题目

  1. 使用map()filter()构建一个处理流程,但不要调用终端操作,验证是否执行了逻辑?
  2. 设计一个流程:过滤出偶数,再平方,然后求和。
  3. 尝试复用一个Stream对象,观察异常,并改用集合重新创建 Stream。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 21:29:22

生成对抗网络:从代码到创意的商业变现指南

生成对抗网络&#xff1a;从代码到创意的商业变现指南 【免费下载链接】stylegan StyleGAN - Official TensorFlow Implementation 项目地址: https://gitcode.com/gh_mirrors/st/stylegan 你是否曾为找不到合适的模特素材而烦恼&#xff1f;是否想过用AI技术批量生成创…

作者头像 李华
网站建设 2026/6/23 18:38:16

【R与Python函数调用适配全攻略】:掌握跨语言协作的5大核心技术

第一章&#xff1a;R与Python函数调用适配的背景与意义在数据科学和统计分析领域&#xff0c;R语言以其强大的统计建模能力和丰富的可视化包广受青睐&#xff0c;而Python则凭借其通用编程特性、机器学习生态和工程化优势成为主流工具。然而&#xff0c;实际项目中往往需要结合…

作者头像 李华
网站建设 2026/6/23 0:54:01

R与Python库版本同步实践全解析(20年专家亲授避坑手册)

第一章&#xff1a;R与Python库版本同步的背景与挑战在数据科学和统计分析领域&#xff0c;R 与 Python 是两种最广泛使用的编程语言。尽管它们各有优势——R 在统计建模和可视化方面表现突出&#xff0c;而 Python 则以通用性和丰富的机器学习生态见长——但在实际项目中&…

作者头像 李华
网站建设 2026/6/23 19:48:27

心法利器[147] | Agent,是大模型落地的殊途同归

心法利器 本栏目主要和大家一起讨论近期自己学习的心得和体会。具体介绍&#xff1a;仓颉专项&#xff1a;飞机大炮我都会&#xff0c;利器心法我还有。 2024年新的文章合集已经发布&#xff0c;获取方式看这里&#xff1a;再添近20万字-CS的陋室2024年文章合集更新&#xff0c…

作者头像 李华
网站建设 2026/6/23 1:11:56

金融风险管理实战(R语言蒙特卡洛模拟大揭秘)

第一章&#xff1a;金融风险管理与蒙特卡洛模拟概述在现代金融工程中&#xff0c;风险评估与不确定性建模是投资决策的核心环节。蒙特卡洛模拟作为一种基于随机抽样的数值方法&#xff0c;被广泛应用于资产定价、投资组合风险分析以及衍生品估值等领域。该方法通过生成大量可能…

作者头像 李华
网站建设 2026/6/23 19:51:14

帮我推荐短视频seo电话

短视频SEO优化服务推荐&#xff1a;无锡集客互动专业解决方案在当今数字化营销环境中&#xff0c;短视频已成为品牌传播和用户互动的重要渠道。随着短视频平台的算法不断升级&#xff0c;SEO优化在内容分发中的重要性日益凸显。本文将为您介绍专业的短视频SEO优化服务&#xff…

作者头像 李华