【发布时间】:2019-10-10 06:50:53
【问题描述】:
我有一份计划在多个日期交付的汽车清单,其中 需要根据以下几点进行排序:
- 如果是
isReady>0,,那么它应该首先显示在表格中。和 然后其他值在该特定日期低于它。 - 如果
isReady>0和Objectgear!=null那么,它首先显示在 该特定日期的表格。后跟对象gear==null的其他值。 - 如果
isReady>0、对象gear!=null和对象tyre!=null,那么 该特定日期的值首先显示在表格中。后面是 Objectgear==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<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;
}
}
我开发了一个比较器,它适用于第一个条件 其中
isReady>0。你能帮我解决其他条件吗 上面提到过。
提前致谢。
【问题讨论】:
-
在你当前的代码中,如果
value结尾不是0,你可以返回。但如果是0,则需要再比较下一个条件。以此类推。 -
旁注:您当前的比较器可以简化为
int value =Integer.compare(entry2.getIsReady(), entry1.getIsReady() );。 -
当我的 value=0 时,我需要创建一个函数,例如 compareTyre() 并检查其中的条件?
-
@champ.exe 您不一定需要将其设为单独的方法,但您可以。但是如果 value 是
0并且你还有东西要比较,你需要做更多的比较。 -
您对
isReady>0的要求与您的比较器不匹配。澄清一下:你有一个列表中的所有汽车,并希望对它们进行排序 1)按日期升序,2)按isReady升序,3)非空值首先为gear和 4)非空tyre的第一个值 - 正确吗?日期相同的汽车,isReady、gear和tyre应该如何排序?有关系吗?
标签: java sorting collections