按某些键值删除重复项

时间:2015-04-17 02:36:15

标签: 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

3 个答案:

答案 0 :(得分:4)

您需要覆盖hashCode中的equalsMyObject方法:

@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());

HashSet会忽略您的新对象,如果您的新对象已在该对象中具有相同的idsecondId

答案 1 :(得分:1)

覆盖MyObject中的equals方法(当且仅当它们具有相同的id和第二个id时,两个对象相等),并使用HashSet存储不同的值。

以下是覆盖方法的方法: Override equals method

答案 2 :(得分:1)

您可以使用HashSet。使用HashSet -

  1. 覆盖了您MyObject equals()方法和hashCode()
  2. 向您添加l HashSet