在 Java 里用 Comparator 反转排序顺序,常见有几种方式,取决于你用的是 Java 8+ 还是更早版本。
Comparator.reverseOrder()(最常用 ✅)适用于 自然顺序 的反转(如数字、字符串)。
List<Integer> 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<Integer> asc = Comparator.naturalOrder();
list.sort(asc.reversed());
Comparator<Student> byAge = Comparator.comparing(Student::getAge);
list.sort(byAge.reversed());
Collections.sort(list, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2.compareTo(o1); // 反转
}
});
Comparator<Student> 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 版本,我可以帮你写一段完全贴合你场景的代码。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。