开发者社区> 问答> 正文

根据Java中的嵌套值对对象列表进行排序

我有一份计划在多个日期交付的汽车清单,需要根据以下几点进行分类: 如果isready>0,则应首先显示在表中。然后其他值在特定日期低于它。 如果“ isReady>0和”为“对象” gear!=null,则在该特定日期的表中首先显示该对象。其次是Object的其他值gear==null。 如果是isReady>0,Object gear!=null和Object tyre!=null,则该值首先在该特定日期的表中显示。紧随其后的是Object gear==null和的其他值tyre==null。 以下是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 { @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;
}

} 我已经开发了一个比较器,它在第一个条件下可以很好地工作,其中isready>0。你能帮我解决上面提到的其他条件吗?

展开
收起
小六码奴 2019-10-10 15:27:45 970 0
1 条回答
写回答
取消 提交回答
  • 检查此比较器,以便可以对多个属性进行排序

    public class CarComparator implements Comparator {

    @Override
    public int compare(Car entry1, Car entry2) {
        int value;
        if (entry1.getDeliveryDate().before(entry2.getDeliveryDate())){
            value = -1;
        }else if (entry1.getDeliveryDate().equals(entry2.getDeliveryDate())){
            value = 0;
        }else{
            value =1;
        }
        //For same day
        if (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;
            }
        }
        //if same isReady
        if (value==0){
            if (entry1.getGear()!=null && entry2.getGear()==null) {
                value = -1;
            } else  if (entry1.getGear()==null && entry2.getGear()==null) {
                value = 0;
            } else{
                value = 1;
            }
        }
        //if still equals
        if (value==0){
            if (entry1.getTyre()!=null && entry2.getTyre()==null) {
                value = -1;
            } else  if (entry1.getTyre()==null && entry2.getTyre()==null) {
                value = 0;
            } else{
                value = 1;
            }
        }
    
    
        return value;
    }
    

    } 我不确定这是否是你要尝试的方法。上面的比较器所做的是:首先对日期进行排序,如果发现相等的日期(值= 0),则比较isReady,然后比较getGear()和最后的getTyre()。

    这样,可以在比较器中添加所需数量的属性。

    2019-10-10 15:28:40
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载