0

假设我有一个Person具有简单属性的类,如姓名、年龄、地址、电话和电子邮件。

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

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

例如:我想要一组删除基于电话的重复人员,另一组使用电子邮件删除重复的人员对象。

我知道的唯一方法是Person多次子类并根据我的要求覆盖 equals ,但这会导致类数量的爆炸式增长。

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

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

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

4

2 回答 2

0

使用 Map 而不是 Set 怎么样?映射的键确定定义唯一性的属性,映射的值是键唯一对象的集合。

于 2013-04-09T07:33:44.320 回答
-1

我会写一个 DuplicateRemover 类。这些类将包含删除特定字段重复项的逻辑。例如:

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

}
于 2013-04-09T07:15:38.260 回答