Java 8 Comparator链接单个属性的反向

Log*_*Wlv 10 java sorting comparator java-8

我用a Comparator来排序Student对象列表.

我想反转id属性的排序,但using reverse()方法将它应用于整个排序.

怎么让它发生在id

到目前为止,这是我的代码:

 public List<Student> getStudents(List<String> events) {
    Comparator<Student> comparatorStudents = Comparator.comparing(Student::getCGPA).thenComparing(Student::getName)
      .thenComparingInt(Student::getID).reverse();
    List<Student> students = new ArrayList<Student>();
    //Filling students
    Collections.sort(students, comparatorStudents);
    return students;
  }
Run Code Online (Sandbox Code Playgroud)

shm*_*sel 7

将最后一位更改为:

.thenComparing(Student::getID, Comparator.reverseOrder())
Run Code Online (Sandbox Code Playgroud)

或者,如果您想避免自动装箱:

.thenComparing(Comparator.comparingInt(Student::getID).reversed())
Run Code Online (Sandbox Code Playgroud)

  • @MartinDinev 第一个变体接受 `Function&lt;Student, Integer&gt;`,这意味着它将 `Student.getID()` 返回的 `int` 转换为 `Integer`。另一方面,“Comparator.comparingInt()”接受“ToIntFunction”,并且它仅使用原语进行比较。 (3认同)

das*_*ght 5

reversed()将内部调用thenComparing

public List<Student> getStudents(List<String> events) {
    Comparator<Student> comparatorStudents = Comparator.comparing(Student::getCGPA)
       .thenComparing(Student::getName)
       .thenComparing(Comparator.comparingInt(Student::getID).reversed());
    List<Student> students = new ArrayList<Student>();
    //Filling students
    Collections.sort(students, comparatorStudents);
    return students;
}
Run Code Online (Sandbox Code Playgroud)