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

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

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

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

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

(有适当的获得者和安装者)

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

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

List1和List2的相交(其中idaddresscitycountry ,但不是GenericPojo extraDetails相等)

两个不同的自定义比较类会有帮助吗? 是否有任何库能够有效处理这些操作,还是应该尝试实现我自己的?


如果你必须控制班级,我会建议使用委派。 这是我的尝试:

  • 创建RichList<T>围绕包装List小号实施List合同的基础上,装饰图案。
  • 用一个方法`public boolean equal(T t1,T,t2)创建一个EqualityChecker<T>接口。
  • 为您的泛型pojo实现两次接口:一个只检查ID,另一个检查其他字段。
  • 添加你感兴趣的两种方法(设置减法和设置交集),但是有一个补充参数,它是EqualityChecker<T>具体实例,它将为你进行相等性测试。
  • 因此,您可以将两种操作都添加到已写入EqualityChecker任何种类的对象的所有现有List

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


    如果您的列表不包含重复项(并且声明自定义比较器类),则可以使用两个TreeSet,分别用两个比较器实例化。

    这个(除了重复约束)的缺点是迭代元素时得到的顺序取决于比较器。


    鉴于您对平等的具体要求, List#removeAll()List#retainAll()将不符合您的需求,所以我认为您需要一个自定义实现来执行与这两种操作类似的操作。

    链接地址: http://www.djcxy.com/p/43759.html

    上一篇: Java: How do I perform list operations with different definitions of equals?

    下一篇: How can I safely solve this Java context classloader problem?