news 2026/4/15 12:00:08

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/4/14 16:30:03

MCP AI-102模型更新全记录(20年专家亲测性能提升90%)

第一章&#xff1a;MCP AI-102模型更新概述MCP AI-102 是微软认知平台&#xff08;Microsoft Cognitive Platform&#xff09;中用于视觉识别任务的核心人工智能模型之一。本次更新聚焦于提升图像分类精度、优化推理延迟&#xff0c;并增强对边缘设备的兼容性支持。新版本引入了…

作者头像 李华
网站建设 2026/4/8 16:59:48

不是泡沫!将近30个项目、150亿投资:3D打印真的迎来爆发拐点

截至2025年12月初&#xff0c;笔者查询到今年全国公布了26个3D打印建设项目&#xff0c;总投资额超过142亿&#xff0c;包含可能遗漏的项目&#xff0c;实际的投资规模应该超过了150亿&#xff0c;这就意味着&#xff0c;平均每天有接近5000万投入3D打印行业。这股项目建设热潮…

作者头像 李华
网站建设 2026/4/14 17:21:38

MusicFree插件完全攻略:小白也能轻松打造专属音乐库

MusicFree插件完全攻略&#xff1a;小白也能轻松打造专属音乐库 【免费下载链接】MusicFreePlugins MusicFree播放插件 项目地址: https://gitcode.com/gh_mirrors/mu/MusicFreePlugins 还在为音乐资源分散而烦恼吗&#xff1f;MusicFree插件系统让你用一个应用听遍全网…

作者头像 李华
网站建设 2026/4/3 6:24:20

Ultralytics YOLO GPU性能优化实战:从理论到落地的高效解决方案

Ultralytics YOLO GPU性能优化实战&#xff1a;从理论到落地的高效解决方案 【免费下载链接】ultralytics ultralytics - 提供 YOLOv8 模型&#xff0c;用于目标检测、图像分割、姿态估计和图像分类&#xff0c;适合机器学习和计算机视觉领域的开发者。 项目地址: https://gi…

作者头像 李华
网站建设 2026/4/15 10:47:49

终极Unity视频流集成方案:5分钟搞定RTSP播放器部署

终极Unity视频流集成方案&#xff1a;5分钟搞定RTSP播放器部署 【免费下载链接】RTSP-Player-For-Unity-WebGL 测试网页居中弹窗播放 RTSP 视频&#xff0c;可用于接 rtsp 监控&#xff0c;同时演示怎么接入到 webgl 上 项目地址: https://gitcode.com/gh_mirrors/rt/RTSP-Pl…

作者头像 李华
网站建设 2026/4/15 10:49:06

Draw.io电子工程绘图库完整指南:免费快速掌握专业电路设计

Draw.io电子工程绘图库完整指南&#xff1a;免费快速掌握专业电路设计 【免费下载链接】Draw-io-ECE Custom-made draw.io-shapes - in the form of an importable library - for drawing circuits and conceptual drawings in draw.io. 项目地址: https://gitcode.com/gh_mi…

作者头像 李华