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

如何使用Java Streams API筛选List中name属性重复的对象

首先需要给你的POJO类补全属性的getter方法,否则Stream无法读取私有属性值:

public class SomeClass {
    private int id;
    private String name;
    public SomeClass(int id, String name) {
        super();
        this.id = id;
        this.name = name;
    }
    // 补充getter方法
    public int getId() {
        return id;
    }
    public String getName() {
        return name;
    }
}

具体实现代码

我们可以先统计所有name属性的出现频次,再基于频次过滤原列表,这种方式时间复杂度为O(n),执行效率更高:

// 第一步:统计每个name对应的出现次数
Map<String, Long> nameCountMap = list.stream()
        .collect(Collectors.groupingBy(SomeClass::getName, Collectors.counting()));

// 第二步:过滤出name出现次数大于1的对象,得到结果
List<SomeClass> result = list.stream()
        .filter(obj -> nameCountMap.get(obj.getName()) > 1)
        .collect(Collectors.toList());

最终输出结果的id序列为1,2,5,2,3,完全匹配你预期的s1、s3、s2、s5、s6的顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:57:04