最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Java中 Collection stream 如何将 List 转为 Stream 流
时间:2026-07-27 07:58:47 编辑:袖梨 来源:一聚教程网
Java中将List转为Stream最直接的方式是调用list.stream()获取顺序流,或list.parallelStream()获取并行流;流只能消费一次,且stream()不修改原列表、惰性求值。
Java 中将 List 转为 Stream 最直接的方式是调用 List 接口继承的 stream() 方法。
使用 List.stream() 获取顺序流
List 是 Collection 的子接口,而 Collection 定义了 stream() 默认方法,因此所有 List 实现(如 ArrayList、LinkedList)都可直接调用:
-
list.stream()返回一个**顺序流(Sequential Stream)**,元素顺序与原列表一致 - 该流支持中间操作(如
filter、map)和终结操作(如collect、forEach) - 示例:List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
names.stream().filter(s -> s.length() > 3).forEach(System.out::println);
获取并行流:parallelStream()
如果需要利用多核提升处理性能,可改用 parallelStream():
-
list.parallelStream()返回并行流,底层基于ForkJoinPool - 适用于计算密集、无状态、线程安全的操作(如数值累加、字符串转换)
- 注意:若操作含副作用(如修改共享变量)、依赖顺序(如
findFirst),结果可能不可预期
注意事项与常见误区
流只能消费一次,重复调用终结操作会抛出 IllegalStateException:
立即学习“Java免费学习笔记(深入)”;
- 错误写法:Stream<Integer> s = list.stream(); s.collect(...); s.count(); // 报错
- 正确做法:每次需要新流时重新调用
list.stream() -
stream()不修改原列表,是惰性求值,仅在终结操作触发时才执行
其他方式(不推荐,仅作了解)
虽然可通过 StreamSupport.stream(list.spliterator(), false) 手动创建,但没必要:
- 冗余且易出错,
list.stream()内部正是这样实现的 - 除非需自定义
Spliterator特性(如估算大小、拆分策略),否则无需绕路