Comparator.comparing 倒序两种
时间: 2023-11-11 18:58:17 浏览: 117
Comparator.comparing方法可以用来创建一个比较器,但是如果我们需要倒序排列,应该如何操作呢?
有两种方式可以实现倒序排列:
1. 使用Comparator.comparing方法的reversed()方法,将比较器进行反转。
例如:
```
List<Integer> list = Arrays.asList(1, 3, 2, 5, 4);
list.sort(Comparator.comparing(Integer::intValue).reversed());
System.out.println(list); // [5, 4, 3, 2, 1]
```
2. 使用Comparator.reverseOrder()方法,创建一个默认的比较器,并将其反转。
例如:
```
List<Integer> list = Arrays.asList(1, 3, 2, 5, 4);
list.sort(Comparator.reverseOrder());
System.out.println(list); // [5, 4, 3, 2, 1]
```
相关问题
comparator.comparing 倒序
comparator.comparing可以用于对对象进行排序,通过指定某个属性或者函数来进行比较。如果想要进行倒序排序,可以使用comparator.comparing方法的重载方法comparator.reversed()来实现。
comparator.reversed()是一个中间方法,它返回一个新的比较器,该比较器具有与原始比较器相反的顺序。也就是说,原本顺序的比较器通过reversed方法之后,比较结果将相反。
例如,我们有一个学生类Student,它有姓名和年龄两个属性,我们想要按照年龄的倒序进行排序。可以这样实现:
```
public class Student {
private String name;
private int age;
// 构造方法、getter和setter等省略
public static void main(String[] args) {
List<Student> students = new ArrayList<>();
students.add(new Student("Tom", 20));
students.add(new Student("Alice", 18));
students.add(new Student("Bob", 22));
// 使用comparator.comparing和comparator.reversed进行倒序排序
students.sort(Comparator.comparing(Student::getAge).reversed());
for (Student student : students) {
System.out.println(student.getName() + ", " + student.getAge());
}
}
}
```
运行以上代码,输出结果为:
```
Bob, 22
Tom, 20
Alice, 18
```
以上示例中,我们使用comparator.comparing(Student::getAge)指定按照年龄进行排序,然后使用reversed()方法进行倒序排序。最后输出的结果是按照年龄的倒序排序的学生列表。
Comparator.comparing 倒序
`Comparator.comparing()` 是Java 8及后续版本中用于创建比较器的方法,它允许你通过函数式编程的方式指定比较的关键字。当你想要得到倒序排列的结果时,通常会结合 `Comparator.reverseOrder()`。
例如,如果你想根据 `Map<String, Integer>` 中的数值大小进行降序排序,可以这样做:
```java
import java.util.*;
List<Map<String, Integer>> maps = ... // 要排序的map列表
Comparator<Map<String, Integer>> naturalComparator = Comparator.comparingInt(
map -> (int) map.get("value") // 假设 "value" 是你想使用的键
);
Comparator<Map<String, Integer>> reverseComparator = naturalComparator.reversed();
Collections.sort(maps, reverseComparator);
```
这将导致 `maps` 列表按 "value" 的降序进行排序。
阅读全文