嵌套字段的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

回到顶部