java - 按某些键值删除重复项

标签 java dictionary collections hashmap hashset

说我有我的对象

class MyObject{

    private int id;
    private int secondId;
    private String name;
    private String address;

}

我正在将这些对象的列表添加到列表中。

List<MyObject> finalList = new ArrayList<MyObject>();
while(someCondition) {
      List<MyObject> l = getSomeMoreObjects();
      finalList.addAll(l);
}

一切都很好,除了我只想将具有不同 idsecondId 的新记录添加到列表中。

最好的方法是什么?我认为这将涉及使用 HashMap

最佳答案

您需要覆盖 MyObject 中的 hashCodeequals 方法:

@Override
public int hashCode() {
    int hash = 7;
    hash = 97 * hash + this.id;
    hash = 97 * hash + this.secondId;
    return hash;
}

@Override
public boolean equals(Object obj) {
    if (obj == null)
        return false;
    if (!(obj instanceof MyObject))
        return false;
    MyObject other = (MyObject) obj;
    return this.id == other.id && this.secondId == other.secondId;
}

然后创建HashSet:

HashSet<MyObject> set = new HashSet<>();

然后向其中添加对象:

set.add(new MyObject());

如果集合中已有一个具有相同 idsecondId 的对象,HashSet 将忽略您的新对象。

关于java - 按某些键值删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29689276/

相关文章:

java - jsp中_jspInit()和jspInit()的区别

java - Slick2D + Tiled 无法加载 map

Python - 将文本文件读入字典

performance - Scala集合转换性能: single looping vs.多重循环

java - 基于java类中的2个字段实现搜索

java - 我如何为 future 类(class)的类似潜在数据做好准备?

java - AsyncTask 与嵌套类的数据通信

java - 使用偏移量将一个时区中的日期时间字符串转换为另一个时区

java - Guava CacheBuilder 未按预期工作

ios - 从字典中删除嵌套键