You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java Stream中应用instanceof模式匹配?

在Stream中应用Java 14的instanceof模式匹配?

假设我们拥有一个Animal类型的Stream,Animal存在多个子类。我们希望对该Stream进行过滤,仅保留其中的Zebra实例,同时得到Zebra类型的Stream。

传统实现写法

传统的做法是先过滤出Zebra实例,再进行类型转换,代码如下:

Stream<Zebra> zebraStream = animalStream
    .filter(Zebra.class::isInstance)
    .map(Zebra.class::cast);

Java 14的instanceof模式匹配

Java 14引入了instanceof模式匹配,在单个对象判断时可以直接绑定变量,写法更简洁:

if (animal instanceof Zebra zebra) {
    System.out.println(zebra.countStripes());
}

Stream流水线中的现有实现

那能不能把这种模式匹配语法应用到Stream的流水线操作中呢?目前有一种可行的实现,但写法十分繁琐丑陋:

Stream<Zebra> zebraStream = animalStream.map(animal -> {
        if (animal instanceof Zebra zebra) {
            return zebra;
        }
        return null;
    })
    .filter(Objects::nonNull);

内容的提问来源于stack exchange,提问作者Dario Viva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 08:31:02