news 2026/4/18 3:57:54

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/4/16 22:45:13

HeyGem推荐使用清晰人声音频,背景噪音会影响效果

HeyGem推荐使用清晰人声音频&#xff0c;背景噪音会影响效果 在数字人视频生成技术迅速普及的今天&#xff0c;越来越多的企业与创作者开始尝试用AI驱动虚拟形象“开口说话”。无论是在线课程中的虚拟讲师、企业宣传里的品牌代言人&#xff0c;还是直播带货中的数字主播&#x…

作者头像 李华
网站建设 2026/4/17 9:11:39

HoRain云--Vue导出Excel的5种实用方法

&#x1f3ac; HoRain云小助手&#xff1a;个人主页 &#x1f525; 个人专栏: 《Linux 系列教程》《c语言教程》 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站&#xff0c;性价比超高&#xff0c;大内存超划算&#xff01;…

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

HeyGem能否处理4K视频?高分辨率支持但建议降级

HeyGem能否处理4K视频&#xff1f;高分辨率支持但建议降级 在数字人技术迅速渗透虚拟主播、智能客服和在线教育的今天&#xff0c;AI驱动的口型同步能力已成为内容生产的核心竞争力。用户不再满足于“能动”的数字人&#xff0c;而是追求自然流畅、唇形精准匹配语音的表现力。H…

作者头像 李华
网站建设 2026/4/17 17:55:25

如何用C#集合表达式实现秒级数据过滤?90%程序员忽略的2个关键点

第一章&#xff1a;C#集合表达式筛选的核心概念在C#开发中&#xff0c;集合表达式筛选是处理数据集合的核心技术之一。通过LINQ&#xff08;Language Integrated Query&#xff09;&#xff0c;开发者能够以声明式语法高效地过滤、转换和操作集合数据&#xff0c;极大提升了代码…

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

C#跨平台调试配置全攻略(资深架构师20年实战经验倾囊相授)

第一章&#xff1a;C#跨平台调试的核心挑战在现代软件开发中&#xff0c;C#已不再局限于Windows平台&#xff0c;借助.NET Core及后续的.NET 5&#xff0c;开发者能够在Linux、macOS等系统上构建和运行C#应用。然而&#xff0c;跨平台环境也带来了调试层面的复杂性&#xff0c;…

作者头像 李华
网站建设 2026/4/12 3:28:57

瑜伽馆管理系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】

摘要 随着健康生活理念的普及&#xff0c;瑜伽运动逐渐成为大众日常健身的重要选择&#xff0c;瑜伽馆的数量和规模也随之快速增长。传统的手工管理方式在会员管理、课程安排、财务统计等方面效率低下&#xff0c;难以满足现代瑜伽馆的运营需求。为提高管理效率、优化用户体验&…

作者头像 李华