gpt4 book ai didi

java - 嵌套字段的 Comparator.comparing(...)

转载 作者:太空狗 更新时间:2023-10-29 22:38:05 30 4
gpt4 key购买 nike

假设我有一个像这样的领域模型:

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 版本具有更好的自动类型检测功能,可能不需要。

关于java - 嵌套字段的 Comparator.comparing(...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38533338/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com