stream流排序降序
时间: 2025-05-23 10:36:52 浏览: 16
### 使用 Stream 流实现降序排序
在 Java 中,`Stream` 流提供了 `sorted()` 方法来对数据进行排序。通过传递自定义比较器(`Comparator`),可以轻松实现降序排序[^2]。
以下是基于整数列表的降序排序示例:
```java
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(5, 3, 8, 2, 1, 4);
// 实现降序排序
List<Integer> sortedDescending = numbers.stream()
.sorted((a, b) -> b.compareTo(a)) // 自定义比较器实现降序
.collect(Collectors.toList());
System.out.println("Sorted descending: " + sortedDescending);
}
}
```
上述代码中,`(a, b) -> b.compareTo(a)` 是一个 Lambda 表达式,表示按降序排列两个元素[^2]。
如果需要对对象属性进行降序排序,则可以结合 `Comparator.comparing()` 和 `reversed()` 来完成。例如,假设有一个学生类 `Student`,其中包含 `age` 属性和 `card` 属性,可以根据这些字段进行复杂排序[^3]。
#### 对象属性降序排序示例
```java
import java.util.*;
import java.util.stream.Collectors;
class Student {
private int age;
private String card;
public Student(int age, String card) {
this.age = age;
this.card = card;
}
public int getAge() {
return age;
}
public String getCard() {
return card;
}
@Override
public String toString() {
return "Student{age=" + age + ", card='" + card + "'}";
}
}
public class Main {
public static void main(String[] args) {
List<Student> students = Arrays.asList(
new Student(20, "A"),
new Student(22, "B"),
new Student(20, "C"),
new Student(21, "D")
);
// 按照年龄升序排序,当年龄相同时按照卡号降序排序
List<Student> result = students.stream()
.sorted(Comparator.comparing(Student::getAge).thenComparing(
Comparator.comparing(Student::getCard).reversed()))
.collect(Collectors.toList());
System.out.println(result);
}
}
```
在这个例子中,`Comparator.comparing(Student::getAge)` 定义了主要排序依据为 `age` 的自然顺序;而 `.thenComparing(Comparator.comparing(Student::getCard).reversed())` 则指定了次要排序依据为 `card` 的逆序(即降序)[^3]。
对于更简单的场景,比如仅根据单个字段进行降序排序,可以直接调用 `Comparator.reversed()` 函数反转默认的升序行为[^4]。
```java
List<Person> people = ... ;
List<Person> collect1 = people.stream()
.sorted(Comparator.comparing(Person::getAge).reversed())
.collect(Collectors.toList());
```
此代码片段展示了如何通过对 `Person` 类型的对象按其 `age` 字段进行降序排序[^4]。
### 总结
为了使用 `Stream` 流实现降序排序,既可以采用手动指定 `(b, a) -> b.compareTo(a)` 形式的 Lambda 表达式作为参数传入到 `sorted()` 方法里,也可以借助于 `Comparator.reversed()` 或者链式调用来构建复杂的多级排序逻辑。
问题
阅读全文
相关推荐


















