stream多字段排序
时间: 2023-10-31 10:05:00 浏览: 151
多字段排序可以使用`Comparator`的`thenComparing`方法来实现。该方法可以在已有的排序规则基础上,再添加额外的排序规则。
例如,如果我们有一个`Student`类,其中有`name`和`age`两个字段,我们想要先按照`name`字段进行升序排序,然后再按照`age`字段进行降序排序,我们可以使用以下代码:
```
list = list.stream()
.sorted(Comparator.comparing(Student::getName)
.thenComparing(Comparator.comparing(Student::getAge).reversed()))
.collect(Collectors.toList());
```
这样就可以实现多字段排序了。
相关问题
stream 多字段排序
Stream可以通过Comparator来实现多字段排序。在进行多字段排序时,可以通过多次调用Comparator的thenComparing方法来指定多个排序条件。例如,假设我们有一个Student类,其中有两个字段name和age,我们可以使用Stream对Student对象进行多字段排序。
```java
List<Student> students = ...; // 假设有一个Student对象的集合
List<Student> sortedStudents = students.stream()
.sorted(Comparator.comparing(Student::getName)
.thenComparing(Student::getAge))
.collect(Collectors.toList());
```
上述代码首先根据name字段进行升序排序,然后在name相同时再根据age字段进行升序排序。如果要对某个字段进行降序排序,则可以在该字段的Comparator后面使用reversed方法。例如,要对name字段进行降序排序,可以使用以下代码:
```java
List<Student> sortedStudents = students.stream()
.sorted(Comparator.comparing(Student::getName).reversed()
.thenComparing(Student::getAge))
.collect(Collectors.toList());
```
java stream多字段排序,空值在后
在Java 8中,可以使用Stream API来对多个字段进行排序,并且可以将空值放在排序的最后。下面是一个示例代码:
```java
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
public class Main {
public static void main(String[] args) {
// 创建一个对象列表
List<Person> personList = new ArrayList<>();
personList.add(new Person("张三", 20, 175));
personList.add(new Person("李四", 22, null));
personList.add(new Person("王五", 18, 160));
personList.add(new Person("赵六", null, 170));
// 按照年龄和身高进行排序,空值在后
personList.sort(Comparator
.comparing(Person::getAge, Comparator.nullsLast(Integer::compareTo))
.thenComparing(Person::getHeight, Comparator.nullsLast(Integer::compareTo)));
// 输出排序结果
personList.forEach(System.out::println);
}
}
class Person {
private String name;
private Integer age;
private Integer height;
public Person(String name, Integer age, Integer height) {
this.name = name;
this.age = age;
this.height = height;
}
public String getName() {
return name;
}
public Integer getAge() {
return age;
}
public Integer getHeight() {
return height;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", height=" + height +
'}';
}
}
```
输出结果为:
```
Person{name='王五', age=18, height=160}
Person{name='张三', age=20, height=175}
Person{name='李四', age=22, height=null}
Person{name='赵六', age=null, height=170}
```
在上面的代码中,我们使用了`Comparator.comparing`方法来构建比较器,`Comparator.nullsLast`方法来将空值放在排序的最后。`thenComparing`方法可以在前一个比较器相等的情况下,再按照后一个比较器进行排序。
阅读全文