JDK 1.8以前:
List<User> userList = new ArrayList<>();
Collections.sort(userList, new Comparator<User>() {
@Override
public int compare(User o1, User o2) {
return o1.getAge() - o2.getAge();// 升序
//return o2.getAge() - o1.getAge();// 降序
}
});
JDK 1.8之后:
使用 Stream 流进行排序
//升序
userList = userList.stream().sorted(Comparator.comparing(User::getAge))
.collect(Collectors.toList());
//降序
userList = userList.stream().sorted(Comparator.comparing(User::getAge)
.reversed()).collect(Collectors.toList());
//多字段排序
userList = userList.stream()
.sorted(
Comparator.comparing(User::getAge)
.reversed().thenComparing(Comparator.comparing(User::getGrade))
).collect(Collectors.toList());
注意:使用 Stream 进行排序时,如果排序的字段出现 null 值就会导致空指针异常!
这时需要给 Comparator.comparing 传递第二个参数:Comparator.nullsXXX,如下代码所示
//升序(如果排序的值为null则放在第一位)
userList = userList.stream().sorted(Comparator.comparing(User::getAge,
Comparator.nullsFirst(Integer::compareTo)
))
.collect(Collectors.toList());
Comparator.nullsFirst 表示将排序字段中的 null 值放到集合最前面。
Comparator.nullsLast 表示将排序字段中的 null 值放到集合最后面