Java中倒序排序分两种:对自然序类型(如Integer、String)直接用Comparator.reverseOrder();对自定义对象字段倒序,需用Comparator.comparing(Lambda表达式).reversed()。

Java 中用 Lambda 表达式配合 Comparator.reverseOrder() 实现倒序排序,关键在于理解它本身不接收 Lambda,而是用于构建已知类型的比较器(比如对基本类型包装类、String 或实现了 Comparable 的类),再结合 Lambda 时通常用于“定制字段倒序”——此时要用 Comparator.comparing(...).reversed()。
直接使用 Comparator.reverseOrder()(适用于自然序类型)
当集合元素本身实现了 Comparable(如 Integer、String、LocalDateTime),可直接用 reverseOrder() 获得倒序比较器,无需 Lambda:
-
list.sort(Comparator.reverseOrder());—— 对List<integer></integer>或List<string></string>直接倒序 - 它等价于
Comparator.<integer>naturalOrder().reversed()</integer>,但更简洁 - 注意:
reverseOrder()是静态工厂方法,返回一个通用倒序比较器,不涉及 Lambda
用 Lambda + comparing().reversed()(按对象字段倒序)
对自定义对象(如 User),需先用 Comparator.comparing() 接收 Lambda 提取字段,再调用 reversed() 实现该字段倒序:
-
users.sort(Comparator.comparing(u -> u.getAge()).reversed());—— 按年龄降序 -
users.sort(Comparator.comparing(User::getName).reversed());—— 方法引用写法,效果相同 - 如果字段可能为 null,用
comparing(u -> u.getName(), Comparator.nullsLast(String::compareTo))再链式.reversed()
多级排序中混合正序与倒序
可用 thenComparing() 组合多个条件,各条件独立控制升降序:
立即学习“Java免费学习笔记(深入)”;
users.sort(Comparator.comparing(User::getDept) // 部门升序.thenComparing(User::getSalary).reversed()); // 工资降序- 也可写成:
thenComparing(Comparator.comparing(User::getSalary).reversed())
Stream 排序时同样适用
在流式处理中,sorted() 接收比较器,用法一致:
list.stream().sorted(Comparator.comparing(User::getAge).reversed()).collect(Collectors.toList());-
list.stream().sorted(Comparator.reverseOrder());—— 仅限元素自身可比的情况
不复杂但容易忽略:Lambda 本身不“倒序”,倒序逻辑由 reversed() 或 reverseOrder() 提供;选哪个取决于你是按自然序整体倒排,还是按某个字段定制倒排。


















