【问题标题】:Dynamic equality for java objectsjava对象的动态相等
【发布时间】:2013-04-09 07:10:05
【问题描述】:

假设我有一个Person 类,其属性包括姓名、年龄、地址、电话和电子邮件。

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

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

例如:我希望一组用于删除基于电话的重复人员,另一组用于删除带有电子邮件的重复人员对象。

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

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

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

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

【问题讨论】:

    标签: java set comparator


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2020-07-15
        • 1970-01-01
        • 2021-04-19
        • 1970-01-01
        • 2015-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多