Вот подход:
Создайте Comparator
, который может сравнивать две пары "id / list" - в этом случае мы сравниваем размеры списка компонента списка.
Создайте ArrayList
из этих «пар идентификатора / списка».
Используйте метод Collections.sort
для сортировки ArrayList
в соответствии с Comparator
.
Если я правильно понимаю, есть пара id / list. Вот что я сделал:
class IdListPair {
int id;
List<?> list;
IdListPair(int id, List<?> list) {
this.id = id;
this.list = list;
}
public String toString() {
return "id: " + id + "; list: " + list;
}
}
IdListPair
предоставляет конструктор для создания пары id / list и метод toString
, который будет использован позже для отображения результатов сортировки.
Затем у нас будет раздел, который создает ArrayList
и сортирует список, используя Comparator
:
List<IdListPair> pairList = new ArrayList<IdListPair>();
pairList.add(new IdListPair(0, Arrays.asList(1, 2, 3)));
pairList.add(new IdListPair(1, Arrays.asList(1)));
pairList.add(new IdListPair(2, Arrays.asList(1, 2)));
System.out.println("Before: " + pairList);
Collections.sort(pairList, new Comparator<IdListPair>() {
public int compare(IdListPair o1, IdListPair o2) {
return o1.list.size() - o2.list.size();
}
public boolean equals(Object o) {
return false;
}
});
System.out.println("After: " + pairList);
Сначала был создан ArrayList
с IdListPair
, который имеет списки различной длины.
Затем метод Collections.sort
выполняет сортировку в соответствии с правилами, предоставленными Comparator
. Класс, реализующий Comparator
, должен предоставить методы compare
и equals
.
Здесь был создан Comparator
, поэтому он будет сравнивать size
list
, который каждый объект IdListPair
содержит в методе compare
. Метод equals
является фиктивным, поскольку здесь он не используется.
Большая часть усилий будет направлена на написание правильного метода compare
, поэтому сортировщик Collections.sort
сможет правильно отсортировать список.
Результаты были следующими:
Before: [id: 0; list: [1, 2, 3], id: 1; list: [1], id: 2; list: [1, 2]]
After: [id: 1; list: [1], id: 2; list: [1, 2], id: 0; list: [1, 2, 3]]