Java流API又增加了什么方法

wen java案例 1

本文目录导读:

Java流API又增加了什么方法

  1. Java 9 新增
  2. Java 11 新增
  3. Java 16 新增(重要的一个版本)
  4. Java 17 新增(无)
  5. Java 21 新增(最新 LTS 版本)
  6. Java 22 新增(已稳定)
  7. 快速总结表

截至 2025 年 5 月,Java 流 API(java.util.stream)在 Java 9、Java 11、Java 16、Java 17 和 Java 21 中都有新增方法,以下是主要新增方法及其说明(基于最新稳定版 Java 21):


Java 9 新增

方法 说明
Stream.ofNullable(T) 创建包含单个元素的流,如果元素为 null 则返回空流
Stream.iterate(T seed, Predicate<T> hasNext, UnaryOperator<T> next) 带终止条件的迭代流(三参数版本)
Stream.takeWhile(Predicate) 从流头部开始,一直取元素直到条件为假(包含第一个不满足条件的元素?不包含,这一点与 dropWhile 对称理解)
Stream.dropWhile(Predicate) 从流头部开始,丢弃元素直到条件为假,然后返回剩余所有元素
Stream.iterate(T seed, UnaryOperator) 无限流,原来是 iterate(T, UnaryOperator) 无重载,现在变成了两参数版(实际Java 8已有此方法,但9明确增加的是三参数版)

注意takeWhile / dropWhile有序流无序流 上的行为不同(无序流上可能任意丢弃)。


Java 11 新增

方法 说明
Stream.toArray(IntFunction<A[]>) 已有,但 Java 11 未在 Stream 接口上直接新增方法,Java 11 主要是对 OptionalStringFiles 等的增强,而 Stream API 本身没有新增方法
但注意:Stream.toList() 是 Java 16 才引入的(常被误认为是11)。

Java 16 新增(重要的一个版本)

方法 说明
Stream.toList() 将流元素收集为不可变列表(List<T>,返回类型是 List 但实际是 ImmutableCollections
Stream.mapMulti(BiConsumer<T, Consumer<R>>) 允许每个元素映射到零个或多个元素(类似 flatMap 但更灵活、性能更好)
Stream.mapMultiToInt / mapMultiToLong / mapMultiToDouble 对应原始类型的版本

mapMulti 示例:

Stream.of("a", "bc", "def")
    .mapMulti((s, consumer) -> {
        for (char c : s.toCharArray()) {
            consumer.accept(c);
        }
    })
    .forEach(System.out::println); // 输出 a, b, c, d, e, f

Java 17 新增(无)

Java 17 是 LTS 版本,但 Stream API 没有新增方法


Java 21 新增(最新 LTS 版本)

方法 说明
Stream.gather(Gatherer<T,A,R>) 引入 自定义中间操作 的能力(预览特性,后来稳定于 Java 22)
Stream.toList() 在 Java 21 中行为略有调整(性能优化,不变性保证更清晰)

Gatherer 是 Java 21/22 最重磅的新特性,是流 API 的一次重大扩展,它允许开发者定义自己的中间操作(类似于 filtermapflatMap 等),但能实现更复杂的有状态、分批、滑动窗口等操作。

示例:

// 对每两个元素进行分组 (pair)
Stream.of(1, 2, 3, 4, 5, 6)
    .gather(Gatherers.windowFixed(2))
    .forEach(System.out::println); // 输出 [1,2] [3,4] [5,6]

java.util.stream.Gatherers 内置了一些常用的收集器:

  • windowFixed(int):固定大小窗口
  • windowSliding(int):滑动窗口
  • foldLeft(Z, BiFunction<Z, T, Z>, Function<Z, R>):折叠操作
  • mapConcurrent(int, Function<T, R>):并行映射(限制并发数)

Java 22 新增(已稳定)

方法 说明
Gatherer 相关 API 从预览转为 正式特性 包括 Gatherer 接口和 Gatherers 工具类

快速总结表

Java 版本 新增方法
Java 9 ofNullable、三参数 iteratetakeWhiledropWhile
Java 11 无(但 toList() 常被误认为11,实为16)
Java 16 toList()mapMulti 系列
Java 17
Java 21 gather(Gatherer) + Gatherers 工具类
Java 22 Gatherer 正式稳定

如果你实际使用的是 Java 2122,最值得关注的新方法是:

  • Stream.toList() —— 替代 .collect(Collectors.toList()),更简洁且返回不可变列表
  • Stream.gather(Gatherer) —— 自定义中间操作,功能极其强大

想深入 Gatherer 的用法或需要一个实战例题,我可以为你展开说明。

抱歉,评论功能暂时关闭!