java - Comparator.comparing(...).thenComparing(...) 找出哪些字段不匹配

标签 java java-8 comparator

我正在尝试比较同一类的两个对象,目标是比较它们并确定哪些字段不匹配。
我的域类示例

@Builder(toBuilder=true)
class Employee {
     String name;
     int age;
     boolean fullTimeEmployee;
}
两个对象
Employee emp1 = Employee.builder().name("john").age(25).fullTime(false).build();
Employee emp2 = Employee.builder().name("Doe").age(25).fullTime(true).build();
比较两个对象
int result = Comparator.comparing(Employee::getName, Comparator.nullsFirst(Comparator.naturalOrder()))
                       .thenComparing(Employee::getAge, Comparator.nullsFirst(Comparator.naturalOrder()))
                       .thenComparing(Employee::isFullTimeEmployee, Comparator.nullsFirst(Comparator.naturalOrder()))
                       .compare(emp1, emp2);
结果将是 0因为 name & fullTime字段彼此不匹配。
但我也想生成一个不匹配的字段列表......如下所示
List<String> unmatchedFields = ["name","fulltimeEmployee"];
除了一堆 if() else 之外,我可以用更好的方式来做吗?

最佳答案

退房 DiffBuilder .它可以报告哪些项目不同。

DiffResult<Employee> diff = new DiffBuilder(emp1, emp2, ToStringStyle.SHORT_PREFIX_STYLE)
       .append("name", emp1.getName(), emp2.getName())
       .append("age", emp1.getAge(), emp2.getAge())
       .append("fulltime", emp1.getFulltime(), emp2.getFulltime())
       .build();
DiffResult除其他外,还有一个 getDiffs()方法,您可以循环查找不同之处。

关于java - Comparator.comparing(...).thenComparing(...) 找出哪些字段不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65816162/

相关文章:

java - java spring中的通用集合依赖

java - Mockito returnsFirstArg() 使用

java - 使用 Java 流移除和收集元素

java - 构造函数中的匿名比较器使用强制转换为 Comparable

java - 对 List<Map<String, String>> 进行排序

java - 如果 JPEG 为 10MB,java.awt.Image 将消耗多少内存?

java - 如何将形状或位图绘制到另一个位图中,Java/android

java - 使用 java 8 从 map 中使用比较器和 crieria 进行排序

java - 错误不兼容类型: unexpected return value - iterating through a list

java - 如何在 Lambda 表达式中定义 Intent