java对象的动态相等

时间:2013-04-09 07:10:06

标签: java set comparator

假设我有一个Person类,其名称,年龄,地址,电话和电子邮件等属性都很简单。

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

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

对于实例:我希望一套基于手机删除重复的人,而另一套则用电子邮件删除重复的人物对象。

我所知道的唯一方法是多次子类Person并根据我的要求覆盖等于,但这会导致类数量激增。

Comparators允许这样做。我可以为我需要/想要的同一个对象定义尽可能多的匿名比较器。

具体来说,我想理解为什么在Java中我们只能有一个对象的相等定义,但可以定义多个比较器?

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

2 个答案:

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

}