news 2026/8/15 22:07:35

Java Stream核心操作精讲

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java Stream核心操作精讲

以下是您提供的 10 个 Java Stream API 程序示例的执行说明和核心要点。

1. 基础 Stream 操作示例 (Listing 1)

  • 功能:演示Stream的基础操作,包括获取流、使用min()/max()查找极值、sorted()排序、filter()过滤以及forEach()终端操作 。
  • 执行:运行StreamDemo类的main方法。输出将依次显示:
    • Original list: [7, 18, 10, 24, 17, 5]
    • Minimum value: 5
    • Maximum value: 24
    • Sorted stream: 5 7 10 17 18 24
    • Odd values: 5 7 17
    • Odd values greater than 5: 7 17

2. reduce() 归约操作示例 (Listing 2)

  • 功能:演示reduce()方法的两种用法:一种返回Optional<T>(用于可能为空的结果),另一种提供初始值(identity)并返回确定类型的结果 。
  • 执行:运行StreamDemo2类的main方法。输出将显示:
    • Product as Optional: 2570400
    • Product as int: 2570400

3. 并行流与组合器 reduce() 示例 (Listing 3)

  • 功能:演示在并行流 (parallelStream()) 中使用三参数reduce()方法,其中第三个参数combiner用于合并并行计算的部分结果 。
  • 执行:运行StreamDemo3类的main方法。输出将显示:
    • Product of square roots: 153.246...(具体数值取决于计算精度)

4. map() 映射操作示例 (Listing 4)

  • 功能:演示map()中间操作,将流中的每个元素(Double)通过函数(计算平方根)转换为新元素,生成一个新的流 。
  • 执行:运行StreamDemo4类的main方法。输出将显示:
    • Product of square roots is 153.246...(与 Listing 3 结果一致,但使用顺序流和map实现)

5. map() 提取对象属性示例 (Listing 5)

  • 功能:演示使用map()将一种对象流 (NamePhoneEmail) 映射为另一种对象流 (NamePhone),实现数据投影或转换 。
  • 执行:运行StreamDemo5类的main方法。输出将显示原始列表和仅包含姓名与电话的新列表。

6. 映射到特定类型流示例 (Listing 6)

  • 功能:演示mapToInt()等特化映射操作,将Stream<Double>转换为IntStream,常用于提高数值计算的性能 。
  • 执行:运行StreamDemo6类的main方法。输出将显示原始列表和每个元素向上取整 (Math.ceil) 后的整数值。

7. collect() 收集操作示例 (Listing 7)

  • 功能:演示使用collect()终端操作配合Collectors.toList()Collectors.toSet(),将流中的元素收集到ListSet集合中 。
  • 执行:运行StreamDemo7类的main方法。输出将显示收集到ListSet中的姓名与电话信息。

8. 使用迭代器遍历流示例 (Listing 8)

  • 功能:演示如何通过iterator()方法获取流的迭代器 (Iterator),以传统方式遍历流中的元素 。
  • 执行:运行StreamDemo8类的main方法。输出将按顺序打印列表中的所有字符串。

9. 使用 Spliterator 遍历流示例 (Listing 9)

  • 功能:演示使用spliterator()方法获取流的可拆分迭代器 (Spliterator),并使用tryAdvance()方法遍历元素 。
  • 执行:运行StreamDemo9类的main方法。输出将按顺序打印列表中的所有字符串,功能与Iterator类似。

10. Spliterator分割示例 (Listing 10)

  • 功能:演示SpliteratortrySplit()方法,该方法尝试将迭代器分割成两部分,以支持并行处理 。
  • 执行:运行StreamDemo10类的main方法。输出将分为两部分,分别来自原Spliterator分割后产生的两个部分。

参考来源

  • Java 8 Stream 终端操作大揭秘:代码示例带你轻松掌握
  • java8 stream流操作
  • Java 8 Stream Api 中的 map和 flatMap 操作
  • java 8 Stream中操作类型和peek的使用
  • 怎么break java8 stream的foreach
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/15 22:02:59

C++文件操作全解析:从基础读写到性能优化实战

1. 项目概述&#xff1a;为什么文件操作是C的基石在C的世界里&#xff0c;无论你是想开发一个简单的文本处理工具&#xff0c;一个需要加载配置的游戏&#xff0c;还是一个处理海量数据的分析系统&#xff0c;文件操作都是绕不开的核心技能。它就像是程序与外部世界沟通的桥梁&…

作者头像 李华
网站建设 2026/8/15 22:01:58

AI编程助手Turbo与Turbo+核心区别:从代码补全到任务协作的范式演进

如果你最近在关注 AI 编程助手&#xff0c;大概率会注意到一个现象&#xff1a;无论是社区讨论还是官方宣传&#xff0c;“Turbo”和“Turbo”这两个词出现的频率越来越高。但很多开发者&#xff0c;甚至一些技术文章&#xff0c;都下意识地把它们当成一回事&#xff0c;或者认…

作者头像 李华
网站建设 2026/8/15 21:59:47

网络拨测与 PageSpeed 分工:通不通 vs 快不快的决策顺序

网络拨测与 PageSpeed 分工&#xff1a;通不通 vs 快不快的决策顺序工具地址&#xff1a;https://www.speedce.com 社区论坛&#xff1a;https://bbs.speedce.com 联系&#xff1a;speedceadsgmail.com写在前面 本文围绕「网络拨测与 PageSpeed 分工」展开&#xff0c;提供可落…

作者头像 李华
网站建设 2026/8/15 21:58:45

[通信与计算]复变函数:概念及其与通信的联系

复变函数&#xff1a;概念及其与通信的联系本文从工程视角系统介绍复变函数的基础概念&#xff0c;包括解析性与柯西-黎曼方程、奇点与留数、保角映射以及复变变换&#xff0c;并说明这些概念如何支撑通信和RF系统的分析与设计。图1&#xff1a;复平面中点集在f(z)z^2映射下的示…

作者头像 李华
网站建设 2026/8/15 21:57:21

Go缓存策略实战从本地缓存到Redis多级缓存

Go-缓存策略实战从本地缓存到Redis多级缓存架构 文章导语 缓存是高并发系统的基石。Go中&#xff0c;从内存缓存(sync.Map/freecache)到分布式缓存(Redis)&#xff0c;再到多级缓存架构&#xff0c;每个选择都有其适用场景和性能特征。 一、本地缓存方案 // 1. sync.Map——简单…

作者头像 李华
网站建设 2026/8/15 21:50:35

00 - AI Agent 开发实战 · 课程大纲

从零基础到独立开发 AI Agent 的 24 节系统课程 面向人群&#xff1a;有编程基础&#xff08;前后端/测试等&#xff09;的开发人员 总课时&#xff1a;24 节&#xff08;每节约 60-90 分钟&#xff09; 课程形式&#xff1a;理论讲解 代码演示 随堂练习 综合项目&#x1f4…

作者头像 李华