Java 如何删除具有相同id的重复对象';这是一套

Java 如何删除具有相同id的重复对象';这是一套,java,hashset,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")); Set empSe

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"));
Set empSet=newhashset();
增加(新员工(1名,“纳雷什”);
增加(新员工(2名,“raj”);
增加(新员工(1名,“nesh”);
增加(新员工(2名,“rajes”);
//我在一些博客中看到,我们可以使用hashCode equals方法,但我不知道如何在这种情况下使用它,请帮助我

import groovy.transform.EqualsAndHashCode

@EqualsAndHashCode(includes='id')
class Employee {
    int id
    String name
}
如果使用AST,也可以删除构造函数。Canonical还提供,但要添加include,必须再次单独使用

更新

如果该类不可修改,并且您有一个列表/hasSet,那么您可以使用带有闭包的
unique
来执行唯一性。假设注释中提到的
SolrDocument
被称为
Employee
,并且您具有具有重复的
id
的上述哈希集,那么下面应该可以工作:

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

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

写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;
    }
}

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

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

重写Employee.java中的equals方法,当两个对象的id相同时返回true。这是Groovy吗?看起来像Java…实际上,如果它的对象类型是org.apache.solr.common.SolrDocument,那么我应该怎么做?SolrDocument只是一个映射。你能举个例子说明你在SolrDocument中放了什么吗?实际上,如果它的对象类型是org.apache.solr.common.SolrDocument,那么我应该怎么做?哪个对象?问题中为什么没有提到?你能在问题中清楚地阐述一下吗@在讨论其他问题之前,这是Groovy类还是Java类@Naresh实际上使用groovy,但我们使用ApacheSolr,在从solr获取数据时,它将给出org.apache.solr.common.SolrDocument的列表