怎么用 Comparator 反转
在 Java 里用 Comparator 反转排序顺序,常见有几种方式,取决于你用的是 Java 8+ 还是更早版本。
一、使用 Comparator.reverseOrder()(最常用 ✅)
适用于 自然顺序 的反转(如数字、字符串)。
List list = Arrays.asList(3, 1, 4, 2);
list.sort(Comparator.reverseOrder());
System.out.println(list); // [4, 3, 2, 1]
等效于:
list.sort((a, b) -> b.compareTo(a));
二、使用 comparator.reversed()(推荐 ✅)
如果你已经有了一个 Comparator,直接调用 reversed()。
Comparator asc = Comparator.naturalOrder();
list.sort(asc.reversed());
自定义 Comparator 反转
Comparator byAge = Comparator.comparing(Student::getAge);
list.sort(byAge.reversed());
三、传统写法(Java 8 之前)
Collections.sort(list, new Comparator() {
@Override
public int compare(Integer o1, Integer o2) {
return o2.compareTo(o1); // 反转
}
});
四、多条件排序 + 反转
Comparator comparator =
Comparator.comparing(Student::getScore)
.thenComparing(Student::getAge)
.reversed();
list.sort(comparator);
⚠️ 注意:reversed() 会反转整个比较链,不是只反转最后一个条件。
如果你只想反转某一个条件,需要这样写:
Comparator.comparing(Student::getScore, Comparator.reverseOrder())
.thenComparing(Student::getAge)
五、总结对照表
| 场景 | 写法 |
|---|---|
| 自然顺序反转 | Comparator.reverseOrder() |
| 已有 Comparator 反转 | comparator.reversed() |
| 自定义规则反转 | thenComparing + reverseOrder() |
| 老版本 Java | 手动交换 compareTo |
如果你有 具体对象 / 排序字段 / Java 版本,我可以帮你写一段完全贴合你场景的代码。