首页 > 解决方案 > 基于Java中的嵌套值对对象列表进行排序

问题描述

我有一个计划在多个日期交付的汽车列表,需要根据以下几点进行排序:

以下是class代码:

public class Car {
    private int isReady;
    private Tyre tyre;
    private Gear gear;
    private Date deliveryDate;
}


public class Gear {
    private int id;
    private String type;
}


public class Tyre {
    private int id;
    private String grip;
}

public class CarComparator implements Comparator<Car> {
    @Override
    public int compare(Car entry1, Car entry2) {
        int value = 0;

        if (entry1.getIsReady() > entry2.getIsReady()) {
            value = -1;
        } else if (entry1.getIsReady() < entry2.getIsReady()) {
            value = 1;
        } else if (entry1.getIsReady() == entry2.getIsReady()) {
            value = 0;
        }
        return value;
    }
}

我开发了一个比较器,它适用于第一个条件 where isReady>0. 你能帮我解决上面提到的其他条件吗?

提前致谢。

标签: javasortingcollections

解决方案


好吧,从 Java 8 开始,您可以像这样构建比较器:

//order by delivery date first, ascending order
Comparator<Car> carComparator = Comparator.comparing( Car::getDeliveryDate )
  //order by isReady in ascending order
  .thenComparing( Car::getIsReady )
  //we map null to 1 and non-null to -1 and ignore the rest for now
  .thenComparing( car -> car.getGear() != null ? -1 : 1 ) 
  .thenComparing( car -> car.getTyre() != null ? -1 : 1 );

推荐阅读