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;
}
};
}
}