stream().sorted 多个字段排序
时间: 2023-09-10 11:10:42 浏览: 99
可以使用 `Comparator` 的 `thenComparing()` 方法来对多个字段进行排序。假设我们有一个 `Person` 类,其中包含了 `name`、`age` 和 `height` 三个字段,代码如下:
```java
public class Person {
private String name;
private int age;
private int height;
// 构造函数、getter/setter 略
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", height=" + height +
'}';
}
}
```
如果我们想要按照年龄升序、身高降序、姓名升序的顺序来排序,代码如下:
```java
List<Person> people = Arrays.asList(
new Person("Alice", 20, 170),
new Person("Bob", 25, 165),
new Person("Charlie", 30, 180),
new Person("David", 25, 175),
new Person("Eve", 20, 160)
);
List<Person> sortedPeople = people.stream()
.sorted(Comparator.comparing(Person::getAge)
.thenComparing(Comparator.comparing(Person::getHeight).reversed())
.thenComparing(Comparator.comparing(Person::getName)))
.collect(Collectors.toList());
sortedPeople.forEach(System.out::println);
```
输出结果如下:
```
Person{name='Alice', age=20, height=170}
Person{name='Eve', age=20, height=160}
Person{name='Bob', age=25, height=165}
Person{name='David', age=25, height=175}
Person{name='Charlie', age=30, height=180}
```
可以看到,按照我们的要求,先按照年龄升序排序,然后按照身高降序排序,最后按照姓名升序排序。使用 `thenComparing()` 方法可以实现多个字段的排序。
阅读全文