Java:如何使用不同的equals定义执行列表操作?

我有两个通用POJO列表。我需要根据比较列表中POJO的不同方法对列表执行一些设置操作。

例如,如果我的POJO具有以下结构:

public class GenericPojo {
    private String id;
    private String address;
    private String city;
    private String country;
    private String extraDetails;
}

(带有适当的getter和setter)

给定List1<GenericPojo>List2<GenericPojo>,我将如何找到:

List1-List2(如果ID相等,则GenericPojo类相等)

List1和List2的相交(其中idaddresscitycountry,但extraDetailsGenericPojo不相等)

两个不同的自定义比较器类在这里有用吗?是否有任何可以有效处理这些操作的库,还是应该尝试实现自己的库?

最佳答案

如果您必须在无法控制的情况下操纵类,我建议您使用委托(delegate)。这是我的尝试:

  • 基于decorator pattern在实现RichList<T>契约(Contract)的List周围创建List包装器。
  • 使用单一方法`public boolean equal(T t1,T,t2)创建一个EqualityChecker<T>接口(interface)。
  • 为您的通用pojo两次实现此接口(interface):一个仅检查ID,另一个检查其他字段。
  • 添加您感兴趣的两个方法(设置减法和设置交集),但是添加一个补充参数,即EqualityChecker<T>具体实例,它将为您执行相等性测试。

  • 因此,对于您为其编写了List的任何类型的对象,您都可以将这两种操作都添加到所有现有的EqualityChecker中。

    进一步的改进:您还可以编写一个默认的EqualityChecker<T>,它仅调用比较对象的equals方法。然后,您可以将这两个新操作重载为默认的EqualityChecker

    07-24 15:56