Como ordenar coleções usando precedência

2023/10/13

import java.util.*;

public final class Comparators {

    private Comparators() {}

    @SafeVarargs
    public static <T> Comparator<T> join(final Comparator<T> c1, final Comparator<T> c2, final Comparator<T>... cN) {
        List<Comparator<T>> comparators = new LinkedList<>();
        comparators.add(c1);
        comparators.add(c2);
        for (Comparator<T> c : cN) {
            comparators.add(c);
        }

        return new Comparator<T>() {

            @Override
            public int compare(T o1, T o2) {
                final Iterator<Comparator<T>> it = comparators.iterator();
                int diff = 0;
                while (diff == 0 && it.hasNext()) {
                    diff = it.next().compare(o1, o2);
                }
                return diff;
            }
        };
    }
}