嵌套字段的Comparator.comparing(…)
假设我有一个像这样的领域模型:
class Lecture { Course course;
... // getters
}
class Course {
Teacher teacher;
int studentSize;
... // getters
}
class Teacher {
int age;
... // getters
}
现在,我可以像这样创建一个教师比较器:
return Comparator .comparing(Teacher::getAge);
但是,我如何像这样在嵌套字段上比较Lecture?
return Comparator .comparing(Lecture::getCourse::getTeacher:getAge)
.thenComparing(Lecture::getCourse::getStudentSize);
我无法Lecture.getTeacherAge()
在模型上添加方法。
回答:
您不能嵌套方法引用。您可以改用lambda表达式:
return Comparator .comparing(l->l.getCourse().getTeacher().getAge(), Comparator.reverseOrder())
.thenComparing(l->l.getCourse().getStudentSize());
无需反向顺序,它就不再那么冗长了:
return Comparator .comparing(l->l.getCourse().getTeacher().getAge())
.thenComparing(l->l.getCourse().getStudentSize());
注意:在某些情况下,您需要明确声明泛型类型。对于
例如,下面的代码不会没有工作,<FlightAssignment, LocalDateTime>
之前comparing(...)
在Java中8。
flightAssignmentList.sort(Comparator .<FlightAssignment, LocalDateTime>comparing(a -> a.getFlight().getDepartureUTCDateTime())
.thenComparing(a -> a.getFlight().getArrivalUTCDateTime())
.thenComparing(FlightAssignment::getId));
较新的Java版本具有更好的自动类型检测功能,可能不需要这样做。
以上是 嵌套字段的Comparator.comparing(…) 的全部内容, 来源链接: utcz.com/qa/419091.html