stream 创建方式有四种:①集合调用 stream() 或 parallelstream();②数组用 arrays.stream()(支持基本类型)或 stream.of()(仅适用引用类型);③stream.of() 适合少量固定值;④iterate/generate 创建无限流,须配合 limit 等终止操作。

从集合直接创建 Stream
这是最常用也最直观的方式。只要对象实现了 Collection 接口(比如 List、Set、Queue),就能直接调用 stream() 方法获取顺序流,或用 parallelStream() 获取并行流。
List<string> list = List.of("a", "b", "c"); Stream<string> s = list.stream();</string></string>- 注意:
stream()不会修改原集合,也不复制数据,只是提供一个数据视图 - 如果集合为空,返回的是合法的空流,不会抛异常,可安全后续操作
从数组构建 Stream
数组本身不是集合,不能直接调用 stream(),但有两类标准方式:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
-
Arrays.stream(array):适用于任意类型数组(包括基本类型如int[]、double[]) -
Stream.of(...):适合引用类型数组或零散元素,但对基本类型数组会把整个数组当作一个元素(容易出错) - 例如:
int[] nums = {1,2,3}; Stream<integer> s = Arrays.stream(nums).boxed();</integer>—— 基本类型数组需先boxed()转为包装类流
用 Stream.of() 快速构造小规模流
适合测试、原型或固定少量值的场景,语法简洁,支持可变参数。
Stream<string> s = Stream.of("hello", "world");</string>Stream<integer> s = Stream.of(1, 2, 3, 4, 5);</integer>- 不推荐用于大量数据(无底层优化,纯内存构造)
- 传入
null会立即抛NullPointerException
通过函数式生成器创建无限流
当需要按规则动态生成数据时,iterate 和 generate 是核心工具,但必须配合 limit() 或其他终止操作使用,否则会无限执行。
-
Stream.iterate(0, n -> n + 1):从起始值开始,每次应用函数生成下一个值(适合等差、递推序列) -
Stream.generate(Math::random):每次调用Supplier.get()产生新元素(适合随机数、UUID、时间戳等) - 两者都返回无限流,漏写
limit(n)或takeWhile(...)会导致程序卡死
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










