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








