Java创建Stream流需三步:选对数据源、调用正确方法、注意生命周期;List/Set等集合可直接stream(),Map需转keySet()等,数组须用Arrays.stream()或Stream.of(),流不可重复使用且惰性求值。

Java 中创建 Stream 流来处理集合数据,核心是三步:选对数据源、调用正确方法、注意流的生命周期。不是所有集合都能直接 stream(),也不是所有数组写法都等效。
从 List、Set 等单列集合创建流
绝大多数 Collection 实现类(如 ArrayList、LinkedList、HashSet)都继承自 Collection 接口,自带 stream() 和 parallelStream() 方法。
- 普通顺序流:
Listlist = Arrays.asList("a", "b", "c"); Stream s = list.stream(); - 并行流(适合大数据量、无状态操作):
list.parallelStream() - 注意:Map 及其子类(如 HashMap)不实现 Collection,不能直接调用 stream();需转成 keySet()、values() 或 entrySet() 后再创建流,例如:
map.keySet().stream()
从数组创建流
数组不是集合,不能直接点 stream(),必须借助工具类或静态工厂方法:
- 用 Arrays.stream()(推荐):
String[] arr = {"x", "y"}; Streams = Arrays.stream(arr); - 用 Stream.of()(适合少量字面量):
Stream—— 它内部会把参数包装为数组再调用 Arrays.streams = Stream.of(1, 2, 3); - 注意:基本类型数组(如 int[])用 Arrays.stream() 会返回 IntStream,不是 Stream
;若需引用流,得先 boxed: Arrays.stream(intArray).boxed()
其他常用创建方式
除了集合和数组,还有几种实用场景下的流创建方式:
- 空流:
Stream.empty()—— 安全替代 null,避免 NPE - 生成无限流(配合 limit 使用):
Stream.iterate(0, n -> n + 2).limit(5)生成前 5 个偶数;Stream.generate(Math::random).limit(3)生成 3 个随机数 - 字符串字符流:
"hello".chars()返回 IntStream;"hello".codePoints()更准确处理 Unicode 补充字符
关键提醒
Stream 是一次性消费的,不可重复使用;中间操作(如 filter、map)不执行,只记下逻辑;只有遇到终止操作(如 collect、forEach、count)才会真正触发流水线执行。误在中间操作里写副作用代码(比如 System.out.println),可能因惰性求值而不输出——这不是 bug,是设计使然。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











