假设我有一个这样的领域模型:
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()
。
原文由 Geoffrey De Smet 发布,翻译遵循 CC BY-SA 4.0 许可协议
您不能嵌套方法引用。您可以改用 lambda 表达式:
不需要倒序,它就更简洁了:
注意:在某些情况下,您需要明确声明通用类型。例如,如果没有
comparing(...)
在 Java 8 中的<FlightAssignment, LocalDateTime>
之前,下面的代码将无法工作。较新的 Java 版本具有更好的自动类型检测功能,可能不需要。