У меня есть метод сортировки, который сортирует несколько списков на основе первого введенного списка.
private static <T extends Comparable<T>> void multiSort(
final List<T> key, List<?>... lists) {
List<Integer> indices = new ArrayList<>();
for (int i = 0; i < key.size(); i++) {
indices.add(i);
}
Collections.sort(indices, (i, j) -> key.get(i).compareTo(key.get(j)));
Map<Integer, Integer> swapMap = new HashMap<>(indices.size());
List<Integer> swapFrom = new ArrayList<>(indices.size()),
swapTo = new ArrayList<>(indices.size());
for (int i = 0; i < key.size(); i++) {
int k = indices.get(i);
while (i != k && swapMap.containsKey(k)) {
k = swapMap.get(k);
}
swapFrom.add(i);
swapTo.add(k);
swapMap.put(i, k);
}
for (List<?> list : lists)
for (int i = 0; i < list.size(); i++)
Collections.swap(list, swapFrom.get(i), swapTo.get(i));
}
Пример: ПЕРЕД ИСПОЛЬЗОВАНИЕМ multiSort
List_1: 7, 3, 8, 2, 20 , 13, 15, 2, 10, 2
Список_2: 400, 216, 307, 50, 61, 111, 209, 77, 15, 36
...
ПОСЛЕ ИСПОЛЬЗОВАНИЯ multiSort
multiSort (List_1, List_1, List_2);
List_1: 2 , 2 , 2 , 3, 7, 8, 10, 13, 15, 20
Список_2: 50 , 77 , 36 , 216, 400 , 307, 15, 111, 209, 61
...
Задача
Что я хочу сделать, это отсортировать List_2 одинаково как первый, если первый список содержит те же значения (2, 2, 2, ...). Ожидаемый результат:
Список_1: 2 , 2 , 2 , 3, 7, 8, 10, 13, 15, 20
Список_2: 36 , 50 , 70 , 216, 400, 307, 15, 111, 209, 61