Java对含有null的集合进行排序

文章介绍了在Java中使用Comparator对List进行排序时,原始方法通过判空后再进行比较,以及一种更优雅的方式,即利用Comparator的nullsFirst和naturalOrder方法实现空值和值的自然顺序排列。

1.原始comparator

public static List<ReportVehicleVo> sortByBuildingPhaseAndFdeName(List<ReportVehicleVo> list){
        list.sort(new Comparator<ReportVehicleVo>() {
            @Override
            public int compare(ReportVehicleVo o1, ReportVehicleVo o2) {
                if (StringUtils.isBlank(o1.getVeBuildingPhase())){
                    return -1;
                }
                if (StringUtils.isBlank(o2.getVeBuildingPhase())){
                    return 1;
                }
                if (o1.getVeBuildingPhase().compareTo(o2.getVeBuildingPhase()) > 0){
                    return 1;
                }else if (o1.getVeBuildingPhase().compareTo(o2.getVeBuildingPhase()) < 0){
                    return -1;
                }else {
                    if (StringUtils.isBlank(o1.getFdeName())){
                        return -1;
                    }
                    if (StringUtils.isBlank(o2.getFdeName())){
                        return 1;
                    }
                    if (o1.getFdeName().compareTo(o2.getFdeName()) > 0){
                        return 1;
                    }else {
                        return -1;
                    }
                }
            }
        });
        return list;
    }

原始方法判空后再排序

2.优雅方式

List<String> testingPlaceList = new ArrayList<>();
testingPlaceList.sort(Comparator.nullsFirst(Comparator.naturalOrder()));

下边一行代码执行完就排好序了,并且nullsFirst会把null值排到前边,如果你想排到后边就换成nullsLast,另外naturalOrder是正序,如果你想倒序就换成reverseOrder

Java中,对 `List` 集合进行排序可以通过多种方式实现,具体取决于集合中元素的类型以及排序需求的复杂程度。以下是几种常见的排序方法: ### 对基本类型或字符串的排序 对于包含基本类型(如 `Integer`、`String`)的 `List`,可以直接使用 `Collections.sort()` 方法进行排序。例如: ```java List<Integer> nums = new ArrayList<>(); nums.add(33); nums.add(53); nums.add(21); nums.add(220); Collections.sort(nums); ``` 此方法会对列表进行升序排序[^3]。 ### 对自定义对象进行排序 当 `List` 中包含自定义对象时,例如 `Student` 类,可以通过以下方式实现排序: #### 使用 `stream()` 和 `sorted()` 利用 Java 8 的 Stream API 可以非常简洁地实现排序。例如,按照 `Student` 对象的 `inTime` 字段倒序排列: ```java List<Student> stuList = new ArrayList<>(); // 添加 Student 对象到 stuList stuList = stuList.stream() .sorted(Comparator.comparing(Student::getInTime).reversed()) .collect(Collectors.toList()); ``` #### 使用 `sort()` 方法 也可以直接调用 `List` 的 `sort()` 方法,例如按照 `age` 字段降序排列: ```java stuList.sort((item1, item2) -> item2.getAge().compareTo(item1.getAge())); ``` ### 多条件排序 对于需要基于多个属性进行排序的情况,可以创建一个 `Comparator` 实例来指定排序逻辑。例如,先按年龄排序,如果年龄相同,则按分数排序: ```java List<TestBean> sortList = new ArrayList<>(); // 添加 TestBean 对象到 sortList Collections.sort(sortList, new Comparator<TestBean>() { @Override public int compare(TestBean o2, TestBean o1) { int sort = o1.getAge() - o2.getAge(); if (sort == 0) { return o1.getScore() - o2.getScore(); } return sort; } }); ``` ### 处理包含 null 元素的排序 当 `List` 中包含 `null` 元素时,可以使用 `Comparator.nullsFirst()` 或 `Comparator.nullsLast()` 来处理 `null` 的情况。例如,将 `null` 元素排在最前面: ```java List<User> numList = new ArrayList<>(); // 添加 User 对象到 numList numList = numList.parallelStream() .sorted(Comparator.nullsFirst(User::getClass).reversed().thenComparing(User::getAge)) .collect(Collectors.toList()); ``` 这种方法确保了即使存在 `null` 排序操作也能安全执行。 ### 总结 以上方法展示了如何在 Java 中对 `List` 集合进行排序的不同策略,包括基本类型的排序、自定义对象的排序、多条件排序以及处理包含 `null` 元素的排序。每种方法都有其适用场景,开发者可以根据实际需求选择合适的方式。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值