Java: Как отсортировать несколько ArrayList по их размеру?
У меня есть 9 различных ArrayList
, и я хочу иметь список верхнего 5.
Я собираюсь отсортировать эти ArrayLists
по их размерам.
Можно ли это сделать? Если да, то как я могу это достичь?
После нескольких попыток я, наконец, получил его работу, просто хочу поделиться им со всеми.
будет лучше получить размер массива и добавить его к большому arraylist
// creates an ArrayList that holds ArrayLists
List allTheLists = new ArrayList();
allTheLists.add(pbaustraliaList.size());
allTheLists.add(pbotherList.size());
allTheLists.add(pbunitedStatesList.size());
allTheLists.add(pbunitedKingdomList.size());
allTheLists.add(pbchinaList.size());
allTheLists.add(pbgermanyList.size());
allTheLists.add(pbindiaList.size());
allTheLists.add(pbjapanList.size());
allTheLists.add(pbsingaporeList.size());
Comparator comparator = Collections.reverseOrder();
Collections.sort(allTheLists,comparator);
//display elements of ArrayList
System.out.println("ArrayList elements after sorting in descending order : ");
for(int i=0; i<allTheLists.size(); i++) {
System.out.println(allTheLists.get(i));
}
Ответы
Ответ 1
Что вы можете сделать, это следующее:
// this List of lists will need to contain
// all of the ArrayLists you would like to sort
List<ArrayList> allTheLists;
Collections.sort(allTheLists, new Comparator<ArrayList>(){
public int compare(ArrayList a1, ArrayList a2) {
return a2.size() - a1.size(); // assumes you want biggest to smallest
}
});
Это отсортирует список списков по длине каждого списка. Первый элемент в отсортированном списке будет самым длинным списком, а последний будет самым коротким.
Затем вы можете выполнить итерацию по первым 5 спискам, чтобы увидеть, что такое верхние 5.
Некоторые ссылки для ссылки:
В зависимости от того, как вы сохранили свой ArrayLists
, код для создания List<ArrayList>
будет выглядеть примерно так:
// creates an ArrayList that holds ArrayLists
List<ArrayList> allTheLists = new ArrayList<ArrayList>();
allTheLists.add(yourList1);
allTheLists.add(yourList2);
...
allTheLists.add(yourList9);