假设我有一个Person
类,其名称,年龄,地址,电话和电子邮件等属性都很简单。
我有一堆Sets
,每个都包含Person
个对象。
我想为每个集合动态定义Set
特定的相等性,以便优雅地删除重复项。
对于实例:我希望一套基于手机删除重复的人,而另一套则用电子邮件删除重复的人物对象。
我所知道的唯一方法是多次子类Person
并根据我的要求覆盖等于,但这会导致类数量激增。
Comparators
允许这样做。我可以为我需要/想要的同一个对象定义尽可能多的匿名比较器。
具体来说,我想理解为什么在Java
中我们只能有一个对象的相等定义,但可以定义多个比较器?
在这种情况下最好的方法是什么?
答案 0 :(得分:0)
如何使用Map而不是Set?映射的键确定定义唯一性的属性,映射的值是按键唯一对象的集合。
答案 1 :(得分:-1)
我会像DublicateRemover类一样写。这些类将包含删除特定字段的dublicates的逻辑。例如:
public class DublicateRemover{
public static Set<Person> removeDublicateByPhone(Set<Person> persons, Set<Person> persons2) {
...
}
public static Set<Person> removeDublicateByName(Set<Person> persons, Set<Person> persons2) {
...
}
}