java中对arraylist降序排序最常用comparator.reverseorder()或lambda,基本类型包装类一行搞定;自定义对象用comparingint().reversed();需注意null处理及stream非就地排序。

Java 中用 Comparator 给 ArrayList 降序排序,核心是传入一个“反向比较逻辑”的比较器,最常用的是 Comparator.reverseOrder() 或自定义 lambda 表达式。
对基本类型包装类(如 Integer、String)直接用 reverseOrder()
对于实现了 Comparable 的类型(如 Integer、String、Double),一行就能搞定:
List<integer> list = new ArrayList(Arrays.asList(3, 1, 4, 1, 5)); list.sort(Comparator.reverseOrder()); // 降序:[5, 4, 3, 1, 1] </integer>
注意:list.sort() 是就地排序(修改原列表),无需重新赋值。也可用 Collections.sort(list, comparator),效果相同。
对自定义对象按某字段降序
比如有个 Person 类,想按年龄降序排列:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
class Person {
String name;
int age;
Person(String name, int age) { this.name = name; this.age = age; }
}
List<person> people = ...;
people.sort(Comparator.comparingInt(p -> p.age).reversed());
</person>
-
Comparator.comparingInt(...)生成升序比较器 -
.reversed()将其反转为降序 —— 推荐写法,清晰且可链式调用 - 也可写成
(p1, p2) -> Integer.compare(p2.age, p1.age),但不如上面直观
处理 null 值时要小心
如果列表中可能含 null,默认的 reverseOrder() 会抛 NullPointerException。需显式处理:
- 把
null放最后:Comparator.nullsLast(Comparator.naturalOrder()).reversed() - 把
null放最前:Comparator.nullsFirst(Comparator.naturalOrder()).reversed() - 更安全写法(以 Integer 为例):
Comparator.nullsLast(Comparator.reverseOrder())
Stream 方式(不修改原列表)
如果不想改变原 ArrayList,可用 Stream 得到新排序列表:
List<integer> sortedDesc = list.stream()
.sorted(Comparator.reverseOrder())
.collect(Collectors.toList());
</integer>
适合函数式风格或需要保留原始顺序的场景。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










