Stream流式编程 中间操作和终端操作介绍

一、先立心智模型:Stream 到底是什么?

Stream 不是集合,不存数据,不改数据。

它是:

对数据源的一次性、惰性的、函数式“处理流程描述”

三点必须刻在脑子里:

  1. 惰性执行:中间操作不执行,直到终端操作出现

  2. 流水线模型:元素一个一个穿过全部操作

  3. 一次性消费:终端操作后流关闭

stream.中间操作1().中间操作2().终端操作();

二、Stream 操作的两大阵营

分类作用是否立即执行是否返回 Stream
中间操作描述“怎么处理”❌ 否✅ 是
终端操作触发执行、拿结果✅ 是❌ 否

三、中间操作(Intermediate Operations)

核心作用一句话

中间操作负责“塑形”和“筛选”,不产出结果,只返回新 Stream。


1️⃣ filter:筛选(留下什么)

stream.filter(predicate)

作用:

只让predicate 返回 true 的元素继续往下走

users.stream().filter(u->u.getAge()>=18)

🧠 心法:
永远写“我要什么”,不是“我要丢掉什么”


2️⃣ map:映射(变形)

stream.map(mapper)

作用:

T → R

users.stream().map(User::getName)

注意:

  • 会发生装箱/拆箱

  • 结果是Stream<R>


3️⃣ mapToInt / mapToLong / mapToDouble:数值专用映射

stream.mapToInt(User::getAge)

作用:

转为基本类型流,用于数值计算

好处:

  • 性能更好

  • 可以直接sum / average / max


4️⃣ flatMap:扁平化(降维打击)

stream.flatMap(mapper)

作用:

典型场景:

  • 一对多

  • 集合嵌套

  • SQL 中的 join 思维


5️⃣ distinct:去重

stream.distinct()

基于:

  • equals

  • hashCode

⚠️ 对象必须正确实现这两个方法。


6️⃣ sorted:排序

stream.sorted()stream.sorted(comparator).sorted(Comparator.comparing(User::getAge))

7️⃣ limit / skip:截断与跳过(短路)

.limit(10).skip(5)

作用:

  • limit:最多取 N 个

  • skip:跳过前 N 个

🔥 这是短路操作,会提前终止流水线。


8️⃣ peek:窥视(调试用)

.peek(System.out::println)

⚠️ 不要在peek里写业务逻辑。


四、终端操作(Terminal Operations)

核心作用一句话

终端操作负责“触发执行”和“产出结果”,一旦调用,Stream 关闭。


1️⃣ forEach:消费流

stream.forEach(action)

特点:

  • 无返回值

  • 只做“消费”

⚠️ 不推荐在里面修改外部变量。


2️⃣ collect:收集结果(最重要🔥)

stream.collect(collector)

作用:

把流中的元素收集成你想要的结构

常见:

.toList().toSet().toMap().groupingBy().joining()

3️⃣ reduce:归约(底层思想)

stream.reduce(identity, accumulator)

int sum = nums.stream().reduce(0, Integer::sum);

collect 的思想基础。


4️⃣ count:计数

stream.count()


5️⃣ max / min:极值

stream.max(comparator)

返回:

Optional<T>


6️⃣ findFirst / findAny:查找(短路)

.findFirst() .findAny()

返回 Optional。


7️⃣ anyMatch / allMatch / noneMatch:匹配判断(短路)

.anyMatch() .allMatch() .noneMatch()


五、执行顺序真相(重要)

stream.filter().limit().map().forEach();

❌ 错误理解:

filter 执行完,再执行 limit

✅ 正确理解:

一个元素 → filter → limit → map → forEach

流水线 + 惰性 + 短路。


六、一张表吃透(面试版)

操作类型代表方法特点
筛选filter留下 true
转换map / flatMap变形
排序sorted有状态
截断limit短路
收集collect最常用
判断anyMatch短路
查找findFirst短路

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1131468.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【苹果分级】基于matlab GUI机器视觉苹果质量检测及总分级系统【含Matlab源码 14878期】

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到海神之光博客之家&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49…

【课程设计/毕业设计】基于深度学习的印刷体数字和字母识别基于python深度学习的印刷体数字和字母识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

深度学习计算机毕设之机器学习基于CNN深度学习的遥感图片识别沙漠湖泊和森林

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

ArcGIS土地利用现状图制作全流程

将之前《ArcGIS Pro从0到1制作广东省土地利用现状图》直播回重新录制一遍给大家学习。详见下方视频教学 主要涉及的内容包括&#xff1a;ArcGIS土地利用现状图全流程教学&#xff08;从零数据下载、镶嵌、裁剪、属性表连接整理、面积区域汇总计算、地图全流程制作&#xff09; …

Merge3D 三维引擎中 GeoJSON 数据加载的整体设计

你想分析Merge3D&#xff08;融合引擎&#xff09;三维引擎中GeoJSON数据加载的整体设计&#xff0c;并确认是否有一个统一的类来支持点、线、面等所有几何类型的GeoJSON数据加载。 Merge3D GeoJSON 加载核心实现原理 Merge3D 中 GeoJsonLayer 能一站式支持点、线、面&#xff…

K8S安装指南与核心操作命令汇总

在云原生时代&#xff0c;Kubernetes&#xff08;简称K8S&#xff09;已成为容器编排的事实标准&#xff0c;无论是企业级应用部署还是个人技术学习&#xff0c;掌握K8S的安装与基础操作都是必备技能。本文将从安装前置准备、具体安装步骤&#xff08;以主流的kubeadm方式为例&…

企业知识管理新范式:用ChatWiki+大模型实现“一问即答“[必学收藏]

ChatWiki是一款企业级AI知识库构建平台&#xff0c;通过四步简单操作&#xff08;接入AI模型、创建知识库、配置AI机器人、实现智能应答&#xff09;&#xff0c;将分散的企业文档转化为可对话的智能资产。它解决了知识孤岛、更新低效和交互割裂三大痛点&#xff0c;适用于新员…

15_嵌入式C与控制理论入门:控制算法的定点数优化与精度平衡

嵌入式C与控制理论入门:控制算法的定点数优化与精度平衡 做嵌入式控制开发的你,大概率遇到过这种窘境:精心设计的PID、模糊控制算法,在PC上用浮点数仿真时效果拉满,可移植到STM32、TI C2000等MCU后,要么运算速度慢到突破实时控制阈值,要么因MCU缺少浮点运算单元(FPU)导…

新下证美国外观专利:42款亚马逊侵权高危新品,跨境卖家立即自查!

2025 年 12 月 30 日&#xff0c;美国专利局集中公开了一批外观专利授权公告&#xff0c;涵盖家居用品、母婴玩具、宠物用品、电子设备等四大类43款产品。跨境卖家销售同款或近似款产品时&#xff0c;需警惕侵权风险。以下专利均于 2025 年 12 月 30 日正式授权&#xff0c;涵盖…

【毕业设计】python基于CNN深度学习的遥感图片识别沙漠湖泊和森林

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

Mysql 驱动程序

一、MySQL 驱动程序的概念 驱动程序的主要功能包括&#xff1a; 建立连接&#xff1a;驱动程序负责处理应用程序和 MySQL 数据库之间的网络连接。执行 SQL 语句&#xff1a;驱动程序将应用程序中的 SQL 语句发送到数据库服务器&#xff0c;并接收服务器的响应。处理结果集&am…

【值得收藏】Agent-Graph:构建强大多智能体系统的完整教程

Agent-Graph是基于上下文工程的多智能体系统&#xff0c;提供Agent管理、Workflow可视化编排、Subagent任务分解、双层记忆架构、MCP集成等核心功能。支持团队协作&#xff0c;可分享对话并导出为训练数据&#xff0c;适合构建复杂AI工作流。项目开源&#xff0c;提供完整文档和…

ArcGIS汉化不成功的解决方案

很多粉丝朋友在ArcGIS10.X系列安装出现了不能汉化的问题&#xff0c;即使是在装了汉化包的情况下。今天我们来做一个总结&#xff01; &#xff08;ArcGIS Pro汉化不成功查看&#xff1a;ArcGIS Pro或ArcGIS汉化不了&#xff1f;汉化包装不上&#xff1f;&#xff09; ArcGIS的…

港美主流期货 API 接入全指南:TradingView 看盘策略

最近帮朋友搭建港美期货的自动交易系统&#xff0c;踩了不少 API 接入的坑——比如选 API 时没注意费率结构&#xff0c;初期测试没问题&#xff0c;跑实盘才发现手续费比预期高很多&#xff1b;还有接入时忽略了行情延时的问题&#xff0c;导致策略信号滞后。 索性整理一篇全…

【毕业设计】基于python深度学习的印刷体数字和字母识别基于python的印刷体数字和字母识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

一部手机不够玩?鸿蒙如何把多设备变成一个游戏系统(实战解析)

摘要 这两年&#xff0c;跨屏协作在鸿蒙生态里出现得越来越频繁。 从最早的文件互传、多屏办公&#xff0c;到现在的教育课堂、车机联动&#xff0c;设备之间已经不再是“各干各的”。 在游戏领域&#xff0c;这个变化更明显&#xff1a; 一块屏幕已经不够玩玩家希望多设备一起…

.NET开发必备:Redis、IoC、AutoMapper实战指南

1.Redis、Ioc、AutoMapper等常用技术在现代 .NET&#xff08;尤其是 ASP.NET Core&#xff09;开发中&#xff0c;Redis、IoC&#xff08;Inversion of Control&#xff09; 和 AutoMapper 是非常常见且重要的技术/工具。下面分别对它们进行简要介绍&#xff0c;并说明其用途和…

大型C项目的头文件管理:3招解决“重复包含”与“依赖混乱”

大型C项目的头文件管理:3招解决“重复包含”与“依赖混乱” 做过大型C项目开发或维护的你,大概率踩过头文件的“连环坑”:编译时突然弹出一堆“重定义”错误,排查半天发现是同一个头文件被重复包含;项目迭代到中后期,头文件之间形成“闭环依赖”,改一个底层头文件的宏定…

MemR3:给大模型记忆系统装一个“会思考的小脑“,准确率提升5-9%

MemR3是一种解决大模型记忆系统"最后一公里"难题的新技术&#xff0c;通过将检索转变为可自我反思的智能体&#xff0c;实现从"单次盲搜"到"闭环迭代"的突破。该技术包含Router、Evidence-Gap Tracker和LangGraph三大核心组件&#xff0c;通过状…

用 Wireshark 嗅探 ESP32 通信数据,教你看懂“WiFi 的语言”

&#x1f575;️ 用 Wireshark 嗅探 ESP32 通信数据&#xff0c;教你看懂“WiFi 的语言” 很多做 ESP32 的工程师都会遇到一个瓶颈&#xff1a; 代码看起来没问题日志也没有明显报错但 WiFi 连接就是不稳定 / 偶尔失败 / 延迟巨大 这时候&#xff0c;继续“猜”已经没意义了。 …