需求
对一个集合中其中一个或者多个字段进行排序,并且是组合排序,并且字段可能为空
如:Person对象
@Data
public class Person {
private String name;
private Integer age;
}
测试
public class MainTest {
public static void main(String[] args) {
Person person1 = new Person().setName("Lee").setAge(20);
Person person2 = new Person().setName("Choi").setAge(70);
Person person3 = new Person().setName("Lee").setAge(40);
Person person4 = new Person().setName("Choi").setAge(50);
Person person5 = new Person().setName("Choi").setAge(60);
Person person6 = new Person().setName("Lee").setAge(null);
Person person7 = new Person().setName(null).setAge(80);
List<Person> list = Arrays.asList(person1, person2, person3, person4, person5, person6, person7);
```
// 对名称进行排序 将 null 字段放后面
list.stream().sorted(Comparator.comparing(Person::getName, Comparator.nullsLast(Comparator.naturalOrder()))).forEach(System.out::println);
System.out.println("==========================================");
// 对age进行降序排序 将 null 字段放前面
list.stream().sorted(Comparator.comparing(Person::getAge, Comparator.nullsFirst(Comparator.reverseOrder()))).forEach(System.out::println);
System.out.println("==========================================");
// 先对名称进行排序,再对age进行排序,并将 null 字段放后面
list.stream().sorted(Comparator.comparing(Person::getName, Comparator.nullsLast(Comparator.naturalOrder()))
.thenComparing(Person::getAge, Comparator.nullsLast(Comparator.naturalOrder()))).forEach(System.out::println);
}