news 2026/5/16 0:10:16

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/11 20:34:31

基于ARMCortex-M4F内核的MSP432MCU开发实践【3.6】

(2)温度检测程序 1)温度检测主程序函数temperature()流程图如图9-13所示。在该程序中,首先进行初始化,包括MSP432P401r单片机的P6.4、P6.5引脚的初始化和液晶界面的设置。其次,以初始状态启动I2C,设置TMP275的配置寄存器为0x60,设置TMP275的转换器分辨率为12位,达到0.…

作者头像 李华
网站建设 2026/5/15 3:05:25

GitHub 热榜项目 - 日榜(2026-1-4)

GitHub 热榜项目 - 日榜(2026-1-4) 生成于&#xff1a;2026-1-4 统计摘要 共发现热门项目&#xff1a; 11 个 榜单类型&#xff1a;日榜 本期热点趋势总结 本期GitHub热榜聚焦Python技术栈&#xff0c;展现出三大清晰趋势&#xff1a;实时数据处理与AI应用深度融合&#x…

作者头像 李华
网站建设 2026/5/14 11:19:42

HeyGem生成视频声音不同步?时间戳校准机制探讨

HeyGem生成视频声音不同步&#xff1f;时间戳校准机制探讨 在数字人技术日益普及的今天&#xff0c;AI驱动的口型同步已经从“能用”迈向“逼真”的新阶段。然而&#xff0c;即便像HeyGem这样支持批量生成、流程自动化的系统&#xff0c;用户仍不时反馈&#xff1a;声音比画面快…

作者头像 李华
网站建设 2026/5/14 4:45:37

导师严选2026 AI论文工具TOP8:本科生毕业论文写作全攻略

导师严选2026 AI论文工具TOP8&#xff1a;本科生毕业论文写作全攻略 2026年AI论文工具测评&#xff1a;如何选到适合自己的写作助手 随着人工智能技术的不断进步&#xff0c;AI论文工具已成为本科生撰写毕业论文的重要辅助手段。然而&#xff0c;面对市场上琳琅满目的产品&…

作者头像 李华
网站建设 2026/5/10 14:04:27

高性能编程的秘密武器(C# Span深度实战解析)

第一章&#xff1a;高性能编程的基石——理解Span的核心价值在现代高性能编程中&#xff0c;内存管理与数据访问效率成为决定系统吞吐量的关键因素。Span 作为 .NET 中引入的一种轻量级、堆栈分配的结构体类型&#xff0c;为开发者提供了安全且高效的内存抽象能力。它能够在不触…

作者头像 李华