сравнить список с несколькими атрибутами, включающими логическое значение

У меня есть некоторые классы, которые реализуют интерфейс компаратора для сортировки ArrayList путем добавления объектов пациента, я хочу отсортировать список по нескольким атрибутам и не иметь проблем с сортировкой только с помощью Enums, однако я хочу переопределить эту сортировку с помощью логического значения. Я знаю, что не могу использоватьcompareTo метод, поскольку это не класс Wrapper, но я не могу найти подходящий способ сортировки списка с помощьюboolean.

Любая помощь будет принята с благодарностью.

    public Patient(int nhsNumber, String name, Status triage, boolean previouslyInQueue, boolean waitingTime){
    this.nhsNumber = nhsNumber;
    this.name = name;
    this.triage = triage;
    this.previouslyInQueue = previouslyInQueue;
    this.waitingTime = waitingTime;

}

Это мой класс компаратора

public class PatientInQueueComparator implements Comparator<Patient> {

@Override
public int compare(Patient p1, Patient p2) {

    if(p1.isPreviouslyInQueue() && !p2.isPreviouslyInQueue()){
        return 1;
        }else if(p1.isPreviouslyInQueue() && p2.isPreviouslyInQueue()){
        return -1;
        }
        return 0;
}

Мой основной метод

List<Patient> queue = new ArrayList<Patient>();

queue.add(new Patient(1, "Bob", Status.URGENT, true, false)); //1st
queue.add(new Patient(2, "John", Status.EMERGENCY, false, false)); //5th
queue.add(new Patient(3, "Mary", Status.NON_URGENT, false, false)); //6th
queue.add(new Patient(4, "Luke", Status.SEMI_URGENT, false, true)); //4th
queue.add(new Patient(5, "Harry", Status.NON_URGENT, true, false)); //2nd
queue.add(new Patient(6, "Mark", Status.URGENT, false, true)); //3rd


System.out.println("*** Before sorting:");

for (Patient p1 : queue) {
    System.out.println(p1);
}

Collections.sort(queue, new PatientComparator( 
        new PatientInQueueComparator(),
        new PatientTriageComparator())
);

System.out.println("\n\n*** After sorting:");

for (Patient p1 : queue) {
    System.out.println(p1);
}

Терпеливый Компаратор

    private List<Comparator<Patient>> listComparators;

 @SafeVarargs
    public PatientComparator(Comparator<Patient>... comparators) {
        this.listComparators = Arrays.asList(comparators);
    }

@Override
public int compare(Patient p1, Patient p2) {
    for (Comparator<Patient> comparator : listComparators) {
        int result = comparator.compare(p1, p2);
        if (result != 0) {
            return result;
        }
    }
    return 0;
}

Ответы на вопрос(0)

Ваш ответ на вопрос