news 2026/4/23 21:06:28

281. Java Stream API - 创建 Streams:打开流式编程的大门

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
281. Java Stream API - 创建 Streams:打开流式编程的大门

文章目录

  • 281. Java Stream API - 创建 Streams:打开流式编程的大门
      • 🎯 课程目标
    • 📦 最常见的方式:从集合创建
    • 🏭 `Stream` 工厂方法大合集(`Stream API` 提供)
      • 🔨 示例:`Stream.of(...)` – 多个值转流
      • 🎲 示例:`Stream.generate()` – 无限流(记得限制)
      • ➕ 示例:`Stream.iterate()` – 无限递增流
      • 🧱 示例:`Stream.builder()` – 手动添加元素构建流
    • 📚 从其他结构中创建流
      • 📘 示例:字符串转字符流
      • 🧪 示例:正则拆分字符串成流
      • 📁 示例:读取文件的每一行(注意 `IOException`)
    • 🧤 特殊情况:空流与条件创建流
    • 🧠 小结:流的创建方式速查表
    • 🎓 实战建议

281. Java Stream API - 创建 Streams:打开流式编程的大门


🎯 课程目标

本节我们将学习各种创建Stream的方法,并通过示例掌握何时使用哪种方式。

✅ 了解Stream的多种来源
✅ 掌握工厂方法(Factory Methods
✅ 掌握从集合、数组、字符串等常用类型创建流
✅ 知道特殊情况如何创建空流、无限流等


📦 最常见的方式:从集合创建

你之前最常用的方式就是:

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

这是最基础也最直观的一种方式 —— 来自Collection接口的stream()方法。


🏭Stream工厂方法大合集(Stream API提供)

方法用途示例代码
Stream.of(...)从一个或多个元素构造流(支持 varargs)Stream.of(1, 2, 3)
Stream.empty()构造一个空流Stream.empty()
Stream.generate()使用Supplier无限生成元素Stream.generate(Math::random)
Stream.iterate()使用初始值和函数构造一个无限流Stream.iterate(0, n -> n + 1)
Stream.builder()使用构建器一步步手动添加元素构造流见下方示例

🔨 示例:Stream.of(...)– 多个值转流

Stream<String>languages=Stream.of("Java","Python","Kotlin");languages.forEach(System.out::println);

🎲 示例:Stream.generate()– 无限流(记得限制)

Stream<Double>randoms=Stream.generate(Math::random).limit(5);randoms.forEach(System.out::println);

➕ 示例:Stream.iterate()– 无限递增流

Stream<Integer>evens=Stream.iterate(0,n->n+2).limit(5);evens.forEach(System.out::println);

🧱 示例:Stream.builder()– 手动添加元素构建流

Stream<String>stream=Stream.<String>builder().add("Apple").add("Banana").add("Cherry").build();stream.forEach(System.out::println);

📚 从其他结构中创建流

来源方法/说明示例代码
数组使用Arrays.stream()Arrays.stream(new int[]{1,2,3})
Iterator使用StreamSupport.stream()见下方说明
字符串字符流使用chars()IntStream"hello".chars()
按行读取文件Files.lines(Path)Files.lines(Paths.get("file.txt"))
使用正则分割字符串Pattern.compile(regex).splitAsStream()见下方示例
随机数流new Random().ints()new Random().ints(5)

📘 示例:字符串转字符流

IntStreamchars="hello".chars();chars.forEach(ch->System.out.println((char)ch));

🧪 示例:正则拆分字符串成流

Stream<String>words=Pattern.compile(",\\s*").splitAsStream("apple, banana, cherry");words.forEach(System.out::println);

📁 示例:读取文件的每一行(注意IOException

try(Stream<String>lines=Files.lines(Paths.get("data.txt"))){lines.forEach(System.out::println);}

🧤 特殊情况:空流与条件创建流

有时你需要根据条件返回一个空流:

Stream<String>stream=list.isEmpty()?Stream.empty():list.stream();

比返回null更优雅,避免空指针异常(NPE)。


🧠 小结:流的创建方式速查表

类型创建方式
Collectioncollection.stream()
数组Arrays.stream(array)
值列表Stream.of(...)
无限流Stream.generate()/Stream.iterate()
手动构造Stream.builder()
字符串"abc".chars()
正则拆分字符串Pattern.compile(...).splitAsStream(...)
文件Files.lines(Path)
随机数new Random().ints()
空流Stream.empty()
IteratorStreamSupport.stream(..., false)(进阶)

🎓 实战建议

  • 学习阶段:先从Collection.stream()Stream.of()开始练习
  • 日常开发:结合generate()iterate()制作模拟数据或流控制结构
  • 高阶使用:从文件、正则、随机数等创建“外部数据流”
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 16:16:53

3步搞定复杂任务调度:DolphinScheduler分布式调度系统实战指南

3步搞定复杂任务调度&#xff1a;DolphinScheduler分布式调度系统实战指南 【免费下载链接】dolphinscheduler Dolphinscheduler是一个分布式调度系统&#xff0c;主要用于任务调度和流程编排。它的特点是易用性高、可扩展性强、性能稳定等。适用于任务调度和流程自动化场景。 …

作者头像 李华
网站建设 2026/4/23 13:14:53

lut调色包下载对比:结合lora-scripts训练专属视觉风格AI

lut调色包下载对比&#xff1a;结合lora-scripts训练专属视觉风格AI 在内容创作日益智能化的今天&#xff0c;越来越多设计师、摄影师和独立开发者开始思考一个问题&#xff1a;如何让 AI 不只是“生成一张图”&#xff0c;而是真正理解并复现某种独特的视觉语言&#xff1f;比…

作者头像 李华
网站建设 2026/4/23 9:54:34

AppSmith嵌入式开发实战:快速构建企业级集成应用

还在为系统集成项目耗时数月而头疼吗&#xff1f;传统的开发方式往往让团队陷入无尽的沟通循环和技术债务中。今天&#xff0c;让我们用一种全新的视角来探索AppSmith的嵌入式开发能力&#xff0c;看看如何用零代码的方式&#xff0c;在几天内完成过去需要几个月的集成工作。 【…

作者头像 李华
网站建设 2026/4/23 11:19:25

3步解决DAIN视频插帧显存爆炸:从16GB到8GB的性能优化实战

3步解决DAIN视频插帧显存爆炸&#xff1a;从16GB到8GB的性能优化实战 【免费下载链接】DAIN Depth-Aware Video Frame Interpolation (CVPR 2019) 项目地址: https://gitcode.com/gh_mirrors/da/DAIN 你是否在使用DAIN进行视频帧插值时遭遇显存耗尽&#xff1f;训练时只…

作者头像 李华
网站建设 2026/4/23 9:59:35

Leon Sans文字粒子动画完整指南:从入门到精通

Leon Sans文字粒子动画完整指南&#xff1a;从入门到精通 【免费下载链接】leonsans Leon Sans is a geometric sans-serif typeface made with code in 2019 by Jongmin Kim. 项目地址: https://gitcode.com/gh_mirrors/le/leonsans 想要为网站添加令人惊艳的文字特效&…

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

vue+uniapp+net养老院食堂助餐在线点餐配送系统小程序mysql

文章目录系统概述技术架构核心功能应用价值主要技术与实现手段系统设计与实现的思路系统设计方法java类核心代码部分展示结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;系统概述 该系统基于Vue.js和Uniapp框架开发&#xff0c;结合.…

作者头像 李华