如何删除集合中具有相同ID的重复对象

时间:2014-04-25 16:36:35

标签: java hashset

HashSet包含对象,我想删除其对象具有相同id

的重复项

以下是代码..

Set<Employee> empSet=new HashSet<Employee>();
empSet.add(new Employee(1,"naresh"));
empSet.add(new Employee(2,"raj"));
empSet.add(new Employee(1,"nesh"));
empSet.add(new Employee(2,"rajes"));

//我在一些博客中看到我们可以使用hashCode equals方法,但我不知道如何在这种情况下使用它,请帮帮我

3 个答案:

答案 0 :(得分:1)

import groovy.transform.EqualsAndHashCode

@EqualsAndHashCode(includes='id')
class Employee {
    int id
    String name
}

如果使用@Canonical AST,您也可以删除构造函数。 Canonical还提供@EqualsAndHashCode,但要添加包含它必须再次单独使用。

更新

如果类不可修改并且您有list / hasSet,则可以使用带有闭包的unique来执行唯一性。假设评论中提到的SolrDocument被称为Employee,并且上面的HashSet有重复的ids,那么下面应该有效:

empSet.unique { it.id } //this mutates the original list

empSet.unique( false ) { it.id } //this does not mutate the original  list

答案 1 :(得分:0)

编写equals和hashCode,如下所示

public class Employee {
    private int id;
    private String name;

    public Employee(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Employee employee = (Employee) o;

        if (id != employee.id) return false;

        return true;
    }

    @Override
    public int hashCode() {
        return id;
    }
}

答案 2 :(得分:0)

您需要在Employee类中重写equals()方法,它将被处理。 Set使用equals方法比较Set中插入的对象。

public class Employee 
{
    public boolean equals(Employee e)
    {
       /// logic to compare 2 employee objects
    }
}