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

7 java list comparator

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

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

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

public class GenericPojo {
    private String id;
    private String address;
    private String city;
    private String country;
    private String extraDetails;
}
Run Code Online (Sandbox Code Playgroud)

(与适当的吸气剂和制定者)

鉴于List1<GenericPojo>List2<GenericPojo>,我将如何找到:

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

列表1和列表2的相交(其中id,address,city,country,但不是extraDetailsGenericPojo相等)

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

par*_*tic 2

如果您必须操纵超出您控制范围的类,我建议使用委托。这是我的尝试:

  1. 基于装饰器模式,围绕实现契约创建一个RichList<T>包装器。ListList
  2. EqualityChecker<T>使用单个方法“public boolean equal(T t1, T, t2)”创建一个接口。
  3. 为您的通用 pojo 实现此接口两次:一次仅检查 ID,另一次检查其他字段。
  4. 添加您感兴趣的两种方法(集合减法和集合交集),但带有补充参数,该参数是EqualityChecker<T>将为您执行相等测试的具体实例。

因此,您可以将这两个操作添加到List您已为其编写的任何类型的对象的所有现有 s 中EqualityChecker

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