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

如何使用Java Streams优雅实现列表包含指定id对应对象的校验

默认你的MyObj类已经为id字段实现了Getter方法getId(),可以根据业务场景选择以下两种实现方案:

方案1:高可读性写法(适合中小数据量列表)

直接分两次匹配两个id,逻辑清晰易懂,代码维护成本最低:

// inputId1、inputId2为用户输入的待校验两个id
boolean isBothExist = myList.stream().anyMatch(obj -> inputId1.equals(obj.getId()))
                    && myList.stream().anyMatch(obj -> inputId2.equals(obj.getId()));

方案2:高性能写法(适合大数据量列表)

仅遍历一次列表统计匹配到的不同id数量,避免两次遍历的性能开销:

import java.util.Objects;

// 匹配到的不同id数量
long matchedIdCount = myList.stream()
        .map(MyObj::getId)
        // 用Objects.equals避免id为null时空指针
        .filter(id -> Objects.equals(inputId1, id) || Objects.equals(inputId2, id))
        // 去重,避免同个id重复出现导致计数错误
        .distinct()
        .count();
boolean isBothExist = matchedIdCount == 2;

注意:如果你的业务场景中允许列表里存在多个同id的MyObj实例,必须加distinct()做去重,否则会出现单个id匹配多次导致计数错误的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:24:03