У меня проблема с сортировкой списка, я выполнил все задачи, которые есть в данном упражнении, но мне это не совсем понятно, и я хочу это исправить.Итак, у меня есть Список людей, которые стоят в очереди, скажем, в аптеке.Беременные должны иметь приоритет над всеми, следующий приоритет - люди старше 60 лет.Все работает нормально, за исключением того факта, что человек в возрасте> 60 лет, который пришел первым, отстает от людей в возрасте> 60 лет, которые пришли позже (мне просто нужно, чтобы он работал с правилом FIFO, с критериями для беременных, он работает, как и ожидалось).
Я отсортировал список сначала с помощью метода compareTo()
, а затем с созданным классом внешнего компаратора.
public class Main {
public static void main(String[] args) {
List<Customer> pharmacyQueue = new ArrayList<>();
CustomerComparator customerComparator = new CustomerComparator();
pharmacyQueue.add(new Customer(25, false, "Przemek"));
pharmacyQueue.add(new Customer(35, true, "Anita"));
pharmacyQueue.add(new Customer(55, false, "Wiesława"));
pharmacyQueue.add(new Customer(25, true, "Maryja"));
pharmacyQueue.add(new Customer(85, false, "Halinka"));
pharmacyQueue.add(new Customer(55, false, "Stasia"));
pharmacyQueue.add(new Customer(20, true, "Marta"));
pharmacyQueue.add(new Customer(65, false, "Bożenka"));
pharmacyQueue.add(new Customer(75, false, "Paoasdo"));
Collections.sort(pharmacyQueue);
Collections.sort(pharmacyQueue, customerComparator);
System.out.println("Sorted queue: ");
for (Customer c : pharmacyQueue){
System.out.println(c);
}
}
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Customer implements Comparable<Customer> {
private int age;
private boolean isPregnant;
private String name;
public int compareTo(Customer o) {
if (this.age > 60){
return -1;
}else if (this.age < 60){
return 1;
}
return 0;
}
public class CustomerComparator implements Comparator<Customer> {
@Override
public int compare(Customer o1, Customer o2) {
if (o1.isPregnant() && !o2.isPregnant()){
return -1;
}
if (o1.isPregnant() && o2.isPregnant()){
return 1;
}
return 0;
}
}
Результат:
Sorted queue:
Customer(age=35, isPregnant=true, name=Anita) //fine
Customer(age=25, isPregnant=true, name=Maryja) //fine
Customer(age=20, isPregnant=true, name=Marta) //fine
Customer(age=75, isPregnant=false, name=Paoasdo) //should be 6th
Customer(age=65, isPregnant=false, name=Bożenka) //should be 5th
Customer(age=85, isPregnant=false, name=Halinka) //should be 4th
Customer(age=25, isPregnant=false, name=Przemek) //fine
Customer(age=55, isPregnant=false, name=Wiesława) //fine
Customer(age=55, isPregnant=false, name=Stasia) //fine