假设我有一个领域模型是这样的:
class Lecture {
Course course;
... // getters
}
class Course {
Teacher teacher;
int studentSize;
... // getters
}
class Teacher {
int age;
... // getters
}
现在,我可以创造一个教师比较是这样的:
return Comparator
.comparing(Teacher::getAge);
但我怎么比较嵌套场讲座的,也是这样吗?
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版本有更好的自动型检测,可能不要求。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句