【发布时间】:2017-12-05 14:34:10
【问题描述】:
让我们举个例子,你有两个具有相同值的员工对象,如下所示。
Employee employee1 = new Employee(1001, "Sam", 20000);
Employee employee2 = new Employee(1001, "Sam", 20000);
if(doCompareEmployees(employee1, employee2)){
System.out.println("Both employee objects are same.");
}else{
System.out.println("Both employee objects are not same.");
}
//Here is compare method using java 8.
private boolean doCompareEmployees(Employee employee1, Employee employee2) {
int returnValue = Comparator.comparing(Employee::getID)
.thenComparing(Employee::getName)
.thenComparing(Employee::getSalary)
.compare(employee1, employee2);
if (returnValue != 0){
return false;
}
return true;
}
我想知道,有没有其他更好的方法来比较 Java 8 中的对象?
【问题讨论】:
-
除非您想要基于特定字段的自定义比较,否则首选方法是在您的 Employee 类中覆盖 equals (并且哈希码保持一致)并摆脱这个由 @ 替换的
doCompareEmployees方法改为 987654324@。 -
标准选项仍然是向
Employee添加适当的equals方法。如果这是不可能的,最好的属性检查方法也没有改变:return employee1.getID()==employee2.getID()) && employee1.getName().equals(employee2.getName()) && employee1.getSalary()==employee2.getSalary()); -
有很多可能的方式,一些默认实现 Comparable 的类已经预先构建了你可以使用的“自然顺序”,或者如果你需要一些特定的东西,你可以使用 Comparator 接口并定义你自己的排序方法。
标签: java java-8 compareobject