我正在尝试比较同一类的两个对象,目标是比较它们并确定哪些字段不匹配。
我的域类示例
@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/