Java Stream API中倒序排列需用sorted()配合Comparator.reversed(),支持自然排序类型、自定义对象单字段或多字段组合排序,reversed()是实例方法且需注意null处理。

Java Stream API 中,用 sorted() 配合 Comparator.reversed() 实现倒序(降序)排列,核心是先构造一个升序比较器,再调用 reversed() 反转其顺序。
直接对基本类型或 String 倒序
对于自然排序支持的类型(如 Integer、String),可直接用 Comparator.naturalOrder().reversed():
List<Integer> numbers = Arrays.asList(3, 1, 4, 1, 5);
List<Integer> descending = numbers.stream()
.sorted(Comparator.naturalOrder().reversed())
.collect(Collectors.toList());
// 结果:[5, 4, 3, 1, 1]
对自定义对象按某字段倒序
使用 Comparator.comparing() 指定字段,再链式调用 reversed():
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
record Person(String name, int age) {}
List<Person> people = List.of(
new Person("Alice", 30),
new Person("Bob", 25),
new Person("Charlie", 35)
);
List<Person> byAgeDesc = people.stream()
.sorted(Comparator.comparing(Person::age).reversed())
.collect(Collectors.toList());
// 按 age 降序:Charlie(35), Alice(30), Bob(25)
多字段倒序或混合升降序
reversed() 可作用于任意 Comparator,包括复合比较器。例如:先按姓名升序,再按年龄降序:
立即学习“Java免费学习笔记(深入)”;
- 写法一:分别指定各字段顺序
.sorted(Comparator.comparing(Person::name)
.thenComparing(Comparator.comparing(Person::age).reversed()))
- 写法二:整个比较器统一反转(注意这会把姓名也变成降序)
.sorted(Comparator.comparing(Person::name)
.thenComparing(Person::age).reversed())
二者逻辑不同,按需选择。
避免常见误区
-
Comparator.reversed()是实例方法,必须在已有比较器上调用,不能直接写Comparator.reversed()(会编译失败) - 对 null 值要小心:
comparing()默认不接受 null,可用comparing(..., nullsLast())或nullsFirst()预处理 - 若字段是基本类型包装类(如
Integer),确保不为 null,否则抛NullPointerException

















