【问题标题】:How to sort List with Comparator to sort null value properly?如何使用比较器对列表进行排序以正确排序空值?
【发布时间】:2020-10-01 03:35:41
【问题描述】:

我试图实现的是对具有两个条件的列表进行排序,我想对对象内部的基于列表进行排序,当它是 null 时,我希望它最后排序。

这是我所做的,这是我的 UnAssignedSoResponse.java 对象:

public class UnAssignedSoResponse {

    public Double cbm;

    public ShipmentAddressGroupingResponseHdOnlyDto shipmentAddressGroupingResponseHdOnlyDto;

}

这是我在服务中的代码的样子:

List<UnAssignedSoResponse> unAssignedSoResponse = ObjectMapperUtils.mapAll(salesOrders, UnAssignedSoResponse.class);

    unAssignedSoResponse.sort(Comparator.comparing(u -> u.getShipmentAddressGroupingResponseHdOnlyDto().getShipmentGroupName()),Comparator.nullsLast(Comparator.naturalOrder()));

我的变量unAssignedSoResponse 上方是一个列表,我希望它基于名为shipmentAddressGroupingResponseHdOnlyDto 的列表进行排序,有时shipmentAddressGroupingResponseHdOnlyDtonull,我想在列表的最后设置null。但是如果我写类似上面的东西,我在“排序”中出现错误,带有红色下划线,错误是:

The method sort(Comparator<? super UnAssignedSoResponse>) in the type List<UnAssignedSoResponse> is not applicable for the arguments (Comparator<UnAssignedSoResponse>, Comparator.nullsLast(Comparator.naturalOrder()))

如果我想根据 shippingGroupName 进行排序,我可以这样做:

        unAssignedSoResponse.sort(Comparator.comparing(u -> u.getShipmentAddressGroupingResponseHdOnlyDto().getShipmentGroupName()));

我如何排序null那边的安全?

更新:

我更新了我的代码,因为 Louis Wasserman 回答了这样的问题:

    unAssignedSoResponse.sort(
        Comparator.nullsLast(
            Comparator.comparing(
                u -> u.getShipmentAddressGroupingResponseHdOnlyDto(),
                Comparator.nullsLast(Comparator.comparing(d -> d.getShipmentGroupName()))
            )
        )
    );

没有错误,但我的列表最终不会对 ArrayList 的 null 进行排序,而且根本不会排序,我错过了什么?

【问题讨论】:

    标签: java spring sorting arraylist


    【解决方案1】:
    unAssignedSoResponse.sort(
       Comparator.nullsLast(
          Comparator.comparing(
            u -> u.getShipmentAddressGroupingResponseHdOnlyDto(),
            Comparator.nullsLast(Comparator.comparing(d -> d.getShipmentGroupName())));
    

    您只需要使用nullsLast

    【讨论】:

    • 排序属性中下划线的错误消失了,但我在排序数据时仍然收到错误NullPointerException@157 "java.lang.NullPointerException"
    • @KeVin 基于对输入的更好理解更新了代码。
    • 是的,首先谢谢您,先生,但是在您的代码中似乎缺少两个右括号,当我再添加两个时,它不再显示错误,但是当我运行代码时,它仍然没有对我的列表进行排序,当 shippingAddressGroupingResponseHdOnlyDto 值为 null 时,仍然在顶部
    • 对不起,代码没有问题,我只是把代码放在了错误的行,那是我的列表没有排序。谢谢你先生
    猜你喜欢
    • 2018-09-10
    • 2013-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-30
    • 1970-01-01
    相关资源
    最近更新 更多