1、使用匿名比较器排序
// 创建并初始化 List
List<Person> list = new ArrayList<Person>() {{
add(new Person(1, 30, "北京"));
add(new Person(2, 20, "西安"));
add(new Person(3, 40, "上海"));
}};
// 使用匿名比较器排序
Collections.sort(list, new Comparator<Person>() {
@Override
public int compare(Person p1, Person p2) {
return p2.getAge() - p1.getAge();
}
});
// 打印 list 集合
list.forEach(p -> {
System.out.println(p);
});
Person(id=3, age=40, name=上海)
Person(id=1, age=30, name=北京)
Person(id=2, age=20, name=西安)
2、使用 Stream 流排序
在 JDK 8 之后可以使用更加简单的方法 Stream 流来实现排序功能
// 创建并初始化 List
List<Person> list = new ArrayList<Person>() {{
add(new Person(1, 30, "北京"));
add(new Person(2, 20, "西安"));
add(new Person(3, 40, "上海"));
}};
// 使用 Stream 排序
// 其中 reversed() 表示倒序的意思,如果不使用此方法则是正序。
list = list.stream().sorted(Comparator.comparing(Person::getAge).reversed()).collect(Collectors.toList());
// 打印 list 集合
list.forEach(p -> {
System.out.println(p);
});
Person(id=3, age=40, name=上海)
Person(id=1, age=30, name=北京)
Person(id=2, age=20, name=西安)
扩展:排序字段为 null
使用 Stream 进行排序时,如果排序的字段出现 null 值就会导致异常发生
// 创建并初始化 List
List<Person> list = new ArrayList<Person>() {{
add(new Person(30, "北京"));
add(new Person(10, "西安"));
add(new Person(40, "上海"));
add(new Person(null, "上海"));
}};
// 按照[年龄]正序,但年龄中有一个 null 值
// Comparator.nullsFirst 表示将排序字段中的 null 值放到集合最前面,如果想要将 null 值放到集合最后面可以使用 Comparator.nullsLast。
list = list.stream().sorted(Comparator.comparing(Person::getAge,Comparator.nullsFirst(Integer::compareTo)))
.collect(Collectors.toList());
// 打印 list 集合
list.forEach(p -> {
System.out.println(p);
});
标签:List,list,Person,add,new,排序
From: https://www.cnblogs.com/yqcg/p/17695210.html