news 2026/6/25 7:09:31

273. Java Stream API - Stream 中的中间操作:Mapping 操作详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
273. Java Stream API - Stream 中的中间操作:Mapping 操作详解

文章目录

  • 273. Java Stream API - Stream 中的中间操作:Mapping 操作详解
      • 🧩 什么是 Mapping?
    • 🧪 示例 1:基础 `map()` 操作(注意没有终端操作!)
    • ✅ 示例 2:加入终端操作 `toList()`
    • 🚀 使用 `mapToInt()`:转为 IntStream,性能更高!
    • 📊 示例 3:统计字符串长度的各种统计数据
    • 🧠 补充知识:map() vs. mapToInt()
    • 🔁 惰性求值:中间操作不会立刻执行!
    • 🧪 对比示例:map 和 mapToInt 效果一致,但行为不同
    • 🧭 小结

273. Java Stream API - Stream 中的中间操作:Mapping 操作详解

🧩 什么是 Mapping?

Stream中,**Mapping(映射)*是指使用某个函数将流中的每个元素*转换成另一个元素,可以是不同类型,也可以是同类型。例如:

  • 把字符串转换为其长度(类型变化:String → Integer
  • 把每个整数平方(类型不变:Integer → Integer

🧪 示例 1:基础map()操作(注意没有终端操作!)

List<String>strings=List.of("one","two","three","four");Function<String,Integer>toLength=String::length;Stream<Integer>ints=strings.stream().map(toLength);System.out.println("Done processing");

👀输出是什么?

Doneprocessing

✅ 编译通过,也运行了,但……没有任何数据处理。

📌 原因:map()中间操作,具有惰性求值特性。只有在调用终端操作(如toList()forEach())时,流才开始执行。


✅ 示例 2:加入终端操作toList()

List<String>strings=List.of("one","two","three","four");List<Integer>lengths=strings.stream().map(String::length).toList();// 🚀 触发执行System.out.println("lengths = "+lengths);

输出:

lengths=[3,3,5,4]

🎯 这个版本中:

  • 使用map()把每个字符串转换为它的长度(类型变化:String → Integer)
  • 使用toList()把处理结果收集到列表中,从而触发整个流水线的执行

🚀 使用mapToInt():转为 IntStream,性能更高!

如果我们不需要装箱后的Integer对象,而是直接处理原始int类型,可以使用mapToInt()方法。

List<String>strings=List.of("one","two","three","four");IntStreamlengths=strings.stream().mapToInt(String::length);// 返回 IntStream

⚠️ 和map()不同,这里返回的是IntStream,一个专用于int的流,避免了装箱,提高性能。


📊 示例 3:统计字符串长度的各种统计数据

IntStream提供了非常实用的终端操作 ——summaryStatistics(),一次性获得所有统计信息。

List<String>strings=List.of("one","two","three","four");IntSummaryStatisticsstats=strings.stream().mapToInt(String::length).summaryStatistics();System.out.println("stats = "+stats);

输出:

stats=IntSummaryStatistics{count=4,sum=15,min=3,average=3.750000,max=5}

✅ 一次性获得:

  • count:元素数量
  • sum:总长度
  • min:最短长度
  • max:最长长度
  • average:平均长度

🧠 补充知识:map() vs. mapToInt()

方法输入类型输出类型是否装箱用途
map()Function<T, R>Stream<R>处理任意对象类型
mapToInt()ToIntFunction<T>IntStream专门用于处理整数类型,避免装箱
mapToLong()ToLongFunction<T>LongStream用于处理 long 类型
mapToDouble()ToDoubleFunction<T>DoubleStream用于处理 double 类型

✔ 这些 mapToX 方法适合在你需要高性能数值计算时使用,比如统计、汇总等操作。


🔁 惰性求值:中间操作不会立刻执行!

你写的map()并不会马上对元素做转换,Stream 就像一个懒惰的员工,直到你给它终点(终端操作),它才真正开始干活。

中间操作示例是否触发执行?备注
.map(...)构建 pipeline,不执行
.filter(...)构建 pipeline,不执行
.sorted()构建 pipeline,不执行
.toList()终端操作,触发执行
.forEach()终端操作,触发执行
.count()终端操作,触发执行

🧪 对比示例:map 和 mapToInt 效果一致,但行为不同

List<String>strings=List.of("a","bb","ccc");List<Integer>boxed=strings.stream().map(String::length).toList();// 返回 List<Integer>IntSummaryStatisticsstats=strings.stream().mapToInt(String::length).summaryStatistics();// 原始类型统计

🚀boxed版本使用的是Integer包装类型,适合进一步映射或收集; 📈stats版本用的是IntStream,适合数值统计和计算。


🧭 小结

关键点说明
中间操作(如 map)是惰性的不会立即执行,必须通过终端操作触发
map 可改变类型可将 String 映射为 Integer、Double、Long 等
使用mapToX避免装箱开销高性能数值流:IntStream、LongStream、DoubleStream
summaryStatistics()很强大一次性获取 count、sum、min、max、average
不带终端操作的流什么也不会做要训练学员看到.map()就联想到:是不是漏写了.toList()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/24 19:06:34

xshell能连上ubuntu24而vscode连接不上_临时关闭 Windows 防火墙

&#x1f512; 关闭防火墙的几种方法 您可以根据自己的使用习惯选择以下任一方式。请注意&#xff0c;所有操作均需管理员权限。方法特点/适用场景通过“设置”应用界面直观&#xff0c;适合大多数用户&#xff0c;可分别管理不同网络类型的防火墙。通过控制面板传统方式&#…

作者头像 李华
网站建设 2026/6/25 11:46:11

MCP续证考试预约全流程揭秘:90%考生忽略的关键步骤

第一章&#xff1a;MCP续证考试预约全流程概述对于已获得微软认证专业人员&#xff08;MCP&#xff09;资格的技术从业者&#xff0c;定期完成续证考试是维持认证有效性的重要环节。整个预约流程涵盖资格验证、考试选择、时间安排与确认等多个阶段&#xff0c;需通过微软官方认…

作者头像 李华
网站建设 2026/6/25 13:35:11

12、深入理解FlowTrace:函数调用追踪利器

深入理解FlowTrace:函数调用追踪利器 1. 引言 在调试和性能分析中,了解代码中方法调用的流程至关重要。传统的 wt 命令虽然能实现方法调用流程的追踪,但它仅适用于控制台应用程序,且由于使用调试步进机制,速度较慢。为了实现快速且易用的追踪输出, FlowTrace 工具应…

作者头像 李华
网站建设 2026/6/24 0:45:53

Kimi K2,开源万亿参数大模型

Kimi K2&#xff0c;开源万亿参数大模型Kimi K2方案部署基于 MaaS 调用 Kimi-K2-Instruct 模型创建API-KEY下载安装Cherry Studio体验 Kimi 模型MCP 调用能力体验感受Kimi K2 在开始部署之前&#xff0c;先简单介绍一下Kimi K2。Kimi-K2-Instruct 是由月之暗面&#xff08;Moo…

作者头像 李华
网站建设 2026/6/25 1:40:55

GSE宏编译器:彻底改变你的魔兽世界游戏体验

GSE宏编译器&#xff1a;彻底改变你的魔兽世界游戏体验 【免费下载链接】GSE-Advanced-Macro-Compiler GSE is an alternative advanced macro editor and engine for World of Warcraft. It uses Travis for UnitTests, Coveralls to report on test coverage and the Curse p…

作者头像 李华
网站建设 2026/6/25 1:55:00

GitStats终极指南:快速生成完整的Git仓库统计报告

GitStats终极指南&#xff1a;快速生成完整的Git仓库统计报告 【免费下载链接】git_stats GitStats is a git repository statistics generator. 项目地址: https://gitcode.com/gh_mirrors/gi/git_stats 在软件开发过程中&#xff0c;深入了解代码仓库的演变历程对于团…

作者头像 李华