Java中Comparator的reversed()方法是最简洁的倒序排序方式,它返回原比较器的逆序版本,适用于lambda、方法引用等所有比较器,支持链式调用且兼顾null安全。

Java 中 Comparator 的 reversed() 方法是实现倒序排序最简洁的方式——它直接返回原比较器的逆序版本,无需手动重写逻辑。
reversed() 的基本用法
该方法属于 Comparator 接口的默认方法,调用后生成一个新比较器,比较结果与原比较器相反。适用于所有已有的比较器,包括 lambda、方法引用或自定义实现。
- 对字符串按长度升序 → 调用
reversed()即变为降序 - 对数字按自然顺序(
Integer::compareTo)→reversed()就是倒序 - 链式调用中可多次使用,如
thenComparing(...).reversed()
常见倒序写法对比
不推荐手动反转符号(如 (a, b) -> b.compareTo(a)),容易出错且可读性差。推荐统一用 reversed():
-
升序 → 倒序:
Comparator.naturalOrder().reversed() -
按字段倒序:
Comparator.comparing(Person::getAge).reversed() -
多级倒序:
Comparator.comparing(Person::getName).thenComparing(Person::getAge).reversed()
注意 null 安全和稳定性
reversed() 不改变原比较器行为,只是翻转结果。若原比较器支持 nullsFirst() 或 nullsLast(),倒序后 null 的位置也会相应调整:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
-
Comparator.nullsLast(Comparator.naturalOrder()).reversed()等价于Comparator.nullsFirst(Comparator.reverseOrder()) - 避免在未处理 null 的比较器上调用
reversed(),否则仍可能抛NullPointerException
实际排序示例
对 List 排序时,直接传入 reversed 比较器即可:
List<String> list = Arrays.asList("apple", "banana", "cherry");
list.sort(Comparator.comparing(String::length).reversed()); // 按长度降序
输出:[banana, cherry, apple](长度分别为 6、6、5,相同长度保持原有相对顺序)

















