2013-04-09 34 views
0

假设我有一个Person类,它具有名称,年龄,地址,电话和电子邮件等简单属性。Java对象的动态平等

我有一堆Sets每个包含Person对象。

我想动态地为每个集合定义Set特定的等式,以便优雅地删除重复项。

对于实例:我想要一套基于电话删除重复人员,另一套设置为删除电子邮件中的重复人员对象。

我知道的唯一方法是多次分类Person并根据我的要求重写equals,但这会导致类的数量爆炸。

Comparators的情况下允许。我可以为我需要/想要的同一对象定义尽可能多的匿名比较器。

具体来说,我想知道为什么在Java我们只能有一个平等定义的对象,但可以定义多个比较?

这种情况下最好的方法是什么?

回答

0

如何使用Map而不是Set?地图的键确定在其上定义的独特属性,以及地图的值是唯一的,由密钥对象的集合。

-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) { 
    ... 
} 

}