news 2026/5/26 21:56:46

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/5/24 10:52:46

3D Morphable Models在HeyGem中的建模基础推测

3D Morphable Models在HeyGem中的建模基础推测 在当前数字人技术快速落地的背景下&#xff0c;像HeyGem这样的语音驱动视频生成平台正悄然改变内容创作的方式。用户只需上传一段音频和一个包含人脸的视频&#xff0c;系统就能自动生成该人物“亲口讲述”这段内容的视频。整个过…

作者头像 李华
网站建设 2026/5/26 20:34:09

Angular交互核心03,响应式表单:FormControl、FormGroup 与 FormBuilder 全解析

在 Angular 开发中&#xff0c;表单是交互层的核心组件之一。Angular 提供了两种表单实现方式&#xff1a;模板驱动表单和响应式表单。其中响应式表单&#xff08;Reactive Forms&#xff09;以其可测试性、可复用性和对表单状态的精准控制&#xff0c;成为中大型项目的首选。本…

作者头像 李华
网站建设 2026/5/22 4:28:19

为什么你的C#交错数组总是越界?(3步精准定位访问错误)

第一章&#xff1a;为什么你的C#交错数组总是越界&#xff1f;在C#中&#xff0c;交错数组&#xff08;Jagged Array&#xff09;是一种数组的数组&#xff0c;其内部每个子数组可以拥有不同的长度。这种灵活性虽然强大&#xff0c;但也容易引发索引越界异常&#xff08;IndexO…

作者头像 李华
网站建设 2026/5/24 19:25:00

【C#高级开发必修课】:3个关键场景带你玩转不安全类型与指针操作

第一章&#xff1a;C#不安全代码的引入与基础概念在某些高性能或底层操作场景中&#xff0c;C# 提供了对指针和内存直接访问的能力&#xff0c;这被称为“不安全代码”。尽管 C# 运行在 .NET 的托管环境中&#xff0c;具备垃圾回收和类型安全机制&#xff0c;但在需要与非托管代…

作者头像 李华
网站建设 2026/5/23 7:58:19

C#集合筛选实战精要(高手都在用的5种写法)

第一章&#xff1a;C#集合筛选的核心概念与应用场景在C#开发中&#xff0c;集合筛选是处理数据的核心操作之一。通过LINQ&#xff08;Language Integrated Query&#xff09;&#xff0c;开发者可以以声明式语法高效地从数组、列表、字典等集合中提取符合条件的元素&#xff0c…

作者头像 李华