Если кто-то ищет универсальную реализацию, я ее создал.
Базовый абстрактный класс:
public abstract class AbstractSortHelper<T> implements Comparable<AbstractSortHelper<T>> {
protected final int index;
protected final T data;
public AbstractSortHelper(int index, T data) {
this.index = index;
this.data = data;
}
public int getIndex() {
return index;
}
public T getData() {
return data;
}
}
Первый расширяемый класс, используемый для объектов, реализующих Comparable:
public class ComparableSortHelper<T extends Comparable> extends AbstractSortHelper<T> {
public ComparableSortHelper(int index, T data) {
super(index, data);
}
@Override
public int compareTo(AbstractSortHelper<T> o) {
return this.data.compareTo(o.data);
}
}
Второй расширяющий класс, используемый для объектов, которые не реализуют Comparable.При использовании вам необходимо реализовать Comparator:
public abstract class ComparatorSortHelper<T> extends AbstractSortHelper<T> implements Comparator<T> {
public ComparatorSortHelper(int index, T data) {
super(index, data);
}
@Override
public int compareTo(AbstractSortHelper<T> {
return compare(this.data, o.data);
}
}
Расширение ComparatorSortHelper выглядит следующим образом:
class DataSortHelper extends ComparatorSortHelper<Object[]> {
public DataSortHelper(int index, Object[] data) {
super(index, data);
}
@Override
public int compare(Object[] o1, Object[] o2) {
return Integer.compare((Integer) o1[0], (Integer) o2[0]);
}
}
После использования сортировка выполняется просто:
List<DataSortHelper> list = new ArrayList<>();
// ...
Collections.sort(list);
Надеюсь, это кому-нибудь поможет.:)