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

文章目录

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

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


🎯 课程目标

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

✅ 了解 Stream 的多种来源

✅ 掌握工厂方法(Factory Methods

✅ 掌握从集合、数组、字符串等常用类型创建流

✅ 知道特殊情况如何创建空流、无限流等


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

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

java 复制代码
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(...) -- 多个值转流

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

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

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

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

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

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

java 复制代码
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)

📘 示例:字符串转字符流

java 复制代码
IntStream chars = "hello".chars();
chars.forEach(ch -> System.out.println((char) ch));

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

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

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

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

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

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

java 复制代码
Stream<String> stream = list.isEmpty() ? Stream.empty() : list.stream();

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


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

类型 创建方式
Collection collection.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()
Iterator StreamSupport.stream(..., false)(进阶)

🎓 实战建议

  • 学习阶段 :先从 Collection.stream()Stream.of() 开始练习
  • 日常开发 :结合 generate()iterate() 制作模拟数据或流控制结构
  • 高阶使用:从文件、正则、随机数等创建"外部数据流"
相关推荐
tkevinjd39 分钟前
IO流4(小练习)
java·io流
Vic1010139 分钟前
PostgreSQL 中序列(bigserial 和手动序列)的使用与注意事项
java·大数据·数据库·postgresql
Seven9740 分钟前
数据结构-堆
java
SimonKing1 小时前
你的网站SSL证书又要过期了?这个工具能让你永久告别焦虑
java·后端·程序员
CryptoRzz1 小时前
印度交易所 BSE 与 NSE 实时数据 API 接入指南
java·c语言·python·区块链·php·maven·symfony
梵得儿SHI1 小时前
SpringCloud 核心组件精讲:Sentinel 熔断限流全攻略-流量控制、熔断降级、热点参数限流(含 Dashboard 部署 + 项目集成实操)
java·spring cloud·sentinel·熔断降级·热点参数限流·微服务流量控制
麦兜*1 小时前
Spring Boot 3.x 升级踩坑大全:Jakarta EE 9+、GraalVM Native 与配置迁移实战
java·spring boot·后端·spring·spring cloud
独断万古他化1 小时前
【SpringBoot 配置文件】properties 与 yml 的基础用法、格式及优缺点
java·spring boot·后端
玄〤1 小时前
Spring MVC 讲解:从初始化流程到请求参数与 JSON 处理全解析(黑马课程ssm笔记总结)(day5)
java·spring·json·mvc
廋到被风吹走1 小时前
【Java】【JVM】垃圾回收深度解析:G1/ZGC/Shenandoah原理、日志分析与STW优化
java·开发语言·jvm