针对List的排序,如果是泛型是简单数据类型,如int,long等都可以直接使用Collections.sort(list)来解决,而对于存储的对象类型则不能满足。
这时我们可以通过重写实体类的CompartTo方法来实现自定义比较,但是在现在这个JDK19都发布两个月的时间点,我不允许你还不会使用JDK8的stream流来实现复杂列表的排序。
优点:随用随处理,对其他代码(实体类)无侵入性。速度也超优秀哦!
list.stream().sorted(Comparator.comparing(User::getAge).reversed())
.collect(Collectors.toList());
解释:
1、.sorted() 代表开始进入排序。
2、Comparator.comparing(User::getAge) 表示依据User类的age字段进行比较排序。
3、reversed() 表示倒叙排列,不加默认正序排列。
4、最后是收集成List,不再赘述。
需要注意的是,当传递的泛型为User的list列表排序时,如果依据age进行排序,列表中有对象age字段为NULL,则会抛出异常,此时我们需要做额外处理,防止抛出异常。
在排序条件中,根据自己实际业务需要加上下面两种其中一种:
//null在前,加上默认为正序,所以意思就是 为null的值默认小于非空的值
Comparator.nullsFirst(Integer::compareTo)
//为空的值,默认大于非空的值
Comparator.nullsLast(Integer::compareTo)