news 2026/3/30 21:10:20

282. Java Stream API - 从 Collection 或 Iterator 创建 Stream

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
282. Java Stream API - 从 Collection 或 Iterator 创建 Stream

文章目录

  • 282. Java Stream API - 从 Collection 或 Iterator 创建 Stream
      • ✅ 一、从 Collection 创建 Stream(最常见方式)
      • 🧩 二、`Map` 没有 `stream()`,那怎么办?
        • 📌 示例:打印 Map 中的键值对
      • 🧵 三、从 Iterator 创建 Stream(进阶用法)
        • 🧙 模式结构:
      • 🧪 示例:从自定义 Iterator 创建 Stream
      • 🔍 关键参数解析
      • 💡 用途场景
      • 🧠 小结
      • 🚀 结语

282. Java Stream API - 从 Collection 或 Iterator 创建 Stream


✅ 一、从 Collection 创建 Stream(最常见方式)

这是最常见、最推荐的方式。

List<String>list=List.of("Java","Python","Go");Stream<String>stream=list.stream();

几乎所有实现了Collection接口的容器(如 List、Set)都可以这样创建流。


🧩 二、Map没有stream(),那怎么办?

Map接口不直接提供stream()方法,但它提供了三个间接路径:

想处理什么使用的方法示例代码
处理键map.keySet().stream()
处理值map.values().stream()
处理键值对map.entrySet().stream()✅ 最常用!
📌 示例:打印 Map 中的键值对
Map<String,Integer>scores=Map.of("Alice",90,"Bob",85,"Charlie",95);scores.entrySet().stream().filter(e->e.getValue()>90).forEach(e->System.out.println(e.getKey()+" got "+e.getValue()));

输出:

Charliegot95

🧵 三、从 Iterator 创建 Stream(进阶用法)

Iterator是一种轻量级的数据访问方式。虽然不能直接转为 Stream,但 Java 提供了一种“桥接”模式:

🧙 模式结构:
Iterator<T>Spliterator<T>Stream<T>

🧪 示例:从自定义 Iterator 创建 Stream

Iterator<Integer>iterator=newIterator<>(){privateintindex=0;publicbooleanhasNext(){returnindex<10;}publicIntegernext(){returnindex++;}};longestimateSize=10L;// 估计元素数量intcharacteristics=0;// 特性(稍后讲)Spliterator<Integer>spliterator=Spliterators.spliterator(iterator,estimateSize,characteristics);booleanparallel=false;Stream<Integer>stream=StreamSupport.stream(spliterator,parallel);List<Integer>list=stream.toList();System.out.println("list = "+list);

输出:

list=[0,1,2,3,4,5,6,7,8,9]

🔍 关键参数解析

参数作用说明
estimateSize你预估的数据量,影响流的优化(不是必须精确)
characteristics表示流是否是有序、不可变、大小已知等(以后会讲)
parallel是否并行处理(true:多线程,false:单线程)

💡 用途场景

这种方式常用于:

  • 第三方库只暴露 Iterator
  • 想将老旧代码中的迭代器逻辑现代化为 Stream 流式处理
  • 在不使用额外集合(如 List)前提下,对数据做流式转换

🧠 小结

创建来源推荐方式
List/Setcollection.stream()
Mapmap.entrySet().stream()
IteratorStreamSupport.stream(...)进阶方式

🚀 结语

尽管我们最常用的是collection.stream(),但在复杂项目中,你可能会处理 Map、Iterator、甚至是数据库游标。这时灵活使用各种流创建方式,将极大提升你的代码表现力与可维护性。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/26 12:20:33

iOS Safari访问HeyGem有问题?建议改用Edge浏览器

iOS Safari访问HeyGem有问题&#xff1f;建议改用Edge浏览器 在智能家居设备日益复杂的今天&#xff0c;确保无线连接的稳定性已成为一大设计挑战。类似地&#xff0c;在AI数字人视频生成这类高负载Web应用中&#xff0c;用户终端的“入口”选择——也就是浏览器——往往决定了…

作者头像 李华
网站建设 2026/3/27 17:47:38

你不可不知的5个C#跨平台拦截器配置陷阱与应对策略

第一章&#xff1a;C#跨平台拦截器配置的核心概念在现代软件开发中&#xff0c;C#通过.NET平台实现了真正的跨平台能力&#xff0c;尤其在构建微服务或AOP&#xff08;面向切面编程&#xff09;架构时&#xff0c;拦截器成为控制方法调用、日志记录、权限校验等横切关注点的关键…

作者头像 李华
网站建设 2026/3/27 0:46:54

音频采样率不一致导致HeyGem处理异常?统一为44.1kHz

音频采样率不一致导致HeyGem处理异常&#xff1f;统一为44.1kHz 在AI数字人视频生成的应用场景中&#xff0c;一个看似微不足道的技术细节——音频采样率&#xff0c;常常成为决定任务成败的关键。不少用户反馈&#xff1a;上传的音频明明能播放、内容清晰&#xff0c;为何HeyG…

作者头像 李华
网站建设 2026/3/27 11:42:20

吐血推荐10个AI论文平台,本科生轻松搞定毕业论文!

吐血推荐10个AI论文平台&#xff0c;本科生轻松搞定毕业论文&#xff01; AI 工具如何助力论文写作&#xff1f; 在当今信息爆炸的时代&#xff0c;本科生撰写毕业论文早已不再是单打独斗的挑战。借助 AI 工具&#xff0c;不仅可以大幅提高效率&#xff0c;还能有效降低 AIGC&a…

作者头像 李华
网站建设 2026/3/27 23:42:06

虚拟环境激活命令source activate无效?修正Shell语法

虚拟环境激活命令 source activate 无效&#xff1f;修正 Shell 语法 在部署一个 AI 视频生成系统时&#xff0c;你是否曾遇到这样的场景&#xff1a;一切代码准备就绪&#xff0c;启动脚本也写好了&#xff0c;可一运行却报出 ModuleNotFoundError——明明安装过的 gradio 或 …

作者头像 李华