嵌套场的Comparator.comparing(...)

杰弗里·迪斯:

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

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Java的Comparator.comparing不是比较?

Comparator.comparing中的多次检查

Comparator.comparing()逆转()全部逆转早期比较?

Comparator.comparing(...)。thenComparing(...)找出哪些字段不匹配

Java 8 中 Map.Entry 的 Comparator.comparing

如何为Comparator.comparing使用通用的Number

Java Comparator.comparing方法中泛型的语义

如何获取Comparator.comparing以正确推断类型参数?

Java 8中List的Comparator.comparing中的链方法

Java Comparator.comparing()类型签名是什么意思?

与在 Comparator.comparing() 中使用方法引用混淆

在Comparator.comparing中按位排列并且在Comparator和Serializable之间

比较是基于我自己的方法的结果时,如何使用Comparator.comparing()定义新的Comparator?

带有键提取器的Optional <T>的比较器,例如java.util.Comparator.comparing

如何根据给定条件使用Comparator.comparing()对类进行排序

如何将以下比较器转换为Comparator.comparing?

如何使用Comparator.comparing()比较字符串作为双?

TYPE-安全地创建功能要传递给Comparator.comparing的实例()

Comparator.comparing(...)在采用String :: compareTo时引发非静态引用异常

为什么Java 8的Comparator.comparing()将返回值转换为Serializable?

使用Comparator.comparing(HashMap :: get)作为比较器时发生意外行为

为什么Comparator.comparing无法与String :: toLowerCase方法参考一起使用?

方法参考适用于Comparator.comparing方法,而lambda表达式不起作用

Java 8:在基于给定键比较地图中的值时使用Comparator.comparing

使用Comparator.comparing按对象列表然后按第二个属性对对象进行排序

Android的 - 是否有可能使用Comparator.comparing定制的比较,而不是原料药<24列表进行排序?

Tool for comparing two images?

如何做全文搜索嵌套场在MongoDB中?

Comparing elements of two lists in jython