champ.exe:
私は以下の点に基づいてソートする必要があり、複数の日付の配信を予定して車のリストを持っています:
- 場合
isReady>0,
、それは表に最初に表示されるはずです。そして、他の値は、その特定の日のためにその下に来ます。 - 場合
isReady>0
や、オブジェクトgear!=null
、その後、それはその特定の日のために表に最初に表示されます。オブジェクトの他の値が続きますgear==null
。 - 場合は
isReady>0
、オブジェクトgear!=null
とオブジェクトがtyre!=null
、その値は、その特定の日付の表に最初に表示されます。他の値オブジェクトが続く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<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
。あなたは、上記の他の条件との助けに私を喜ばでした。
前もって感謝します。
イオアニスBarakos:
あなたは複数の属性で並べ替えることができますので、このコンパレータをチェック
public class CarComparator implements Comparator<Car> {
@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は)(比較します。
あなたのコンパレータに必要があるとして、その方法は、あなたは多くの属性として追加することができます。
3台の主な方法を含みます
public class Main {
public static void main (String[]args) throws UnsupportedEncodingException, ParseException {
List<Car> carL = new ArrayList<Car>();
Car car1 = new Car();
car1.setDeliveryDate(new Date());
Gear gear1 = new Gear();
car1.setGear(gear1);
Tyre tyre1 = new Tyre();
car1.setTyre(null);
car1.setId(1);
car1.setDeliveryDate((new SimpleDateFormat("dd-MM-yyyy")).parse("01-01-2000"));
car1.setIsReady(0);
Car car2 = new Car();
car2.setDeliveryDate(new Date());
Gear gear2 = new Gear();
car2.setGear(gear2);
Tyre tyre2 = new Tyre();
car2.setTyre(tyre2);
car2.setId(2);
car2.setDeliveryDate((new SimpleDateFormat("dd-MM-yyyy")).parse("02-01-2000"));
car2.setIsReady(1);
Car car3 = new Car();
car3.setDeliveryDate(new Date());
Gear gear3 = new Gear();
car3.setGear(gear3);
Tyre tyre3 = new Tyre();
car3.setTyre(tyre3);
car3.setId(3);
car3.setDeliveryDate((new SimpleDateFormat("dd-MM-yyyy")).parse("01-01-2000"));
car3.setIsReady(1);
carL.add(car1);
carL.add(car2);
carL.add(car3);
Collections.sort(carL, new CarComparator());
for (Car car : carL) {
System.out.println("car: " + car.toString());
}
}
}
出力:
car: Car{id=3, isReady=1, tyre=false, gear=false, deliveryDate=Sat Jan 01 00:00:00 EET 2000}
car: Car{id=1, isReady=0, tyre=true, gear=false, deliveryDate=Sat Jan 01 00:00:00 EET 2000}
car: Car{id=2, isReady=1, tyre=false, gear=false, deliveryDate=Sun Jan 02 00:00:00 EET 2000}