一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

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() 获取顺序流

ListCollection 的子接口,而 Collection 定义了 stream() 默认方法,因此所有 List 实现(如 ArrayListLinkedList)都可直接调用:

  • list.stream() 返回一个**顺序流(Sequential Stream)**,元素顺序与原列表一致
  • 该流支持中间操作(如 filtermap)和终结操作(如 collectforEach
  • 示例: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 特性(如估算大小、拆分策略),否则无需绕路

热门栏目