java stream多字段排序,空值在后
时间: 2023-08-04 19:22:51 浏览: 160
java 大文件 多字段排序
4星 · 用户满意度95%
在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`方法可以在前一个比较器相等的情况下,再按照后一个比较器进行排序。
阅读全文