Все правы, что вы хотите использовать компараторы. Расширяя эту идею, если вы хотите иметь возможность сортировать по нескольким критериям, то для вас будет работать такой класс:
public class MultiComparator<T> implements Comparator<T> {
private List<Comparator<T>> comparators;
public MultiComparator(List<Comparator<T>> comparators) {
this.comparators = comparators;
}
public int compare(T o1, T o2) {
for (Comparator<T> comparator : comparators) {
int comparison = comparator.compare(o1, o2);
if (comparison != 0) return comparison;
}
return 0;
}
}
Затем вы просто пишете действительно простые компараторы для любых полей, которые вы хотите, и вы можете более легко комбинировать их с более сложными компараторами и с большим повторным использованием.