有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用比较器对列表进行排序以正确排序空值?

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

这是我所做的,这是我未分配的责任。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()))

如果要基于shipmentGroupName进行排序,可以执行以下操作:

        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进行排序,也不会进行排序,我遗漏了什么


共 (1) 个答案

  1. # 1 楼答案

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

    您只需要使用^{}