2010-08-13 3 views
12

У меня есть 9 различных ArrayList, и я хочу, чтобы получить список топ-5Java: Как отсортировать несколько ArrayList по их размеру?

Я думаю о сортировке тех ArrayLists их размеров.

Возможно ли это? Если да, то как я могу это достичь?


После нескольких попыток я, наконец, получил его работу, просто хочу поделиться им со всеми.

это будет лучше, чтобы получить размер ArrayList и добавить его в большой 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)); 
} 
+0

Вы хотите иметь, например, самый короткий список первых и самый длинный в последний раз? – cHao

+0

самый длинный первый. просто увидел пример от justin. я попробую это в первую очередь. спасибо guys =) – user419596

ответ

24

Что вы можете сделать, это следующее:

// 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); 
+1

+1, но я бы использовал List вместо ArrayList в качестве параметра типа. – pcjuzer

+0

@pcjuzer, спасибо. Я тоже. Но это соответствует потребностям вопроса. – jjnguy

+2

Изменение всех экземпляров 'ArrayList' в' List 'работает так же хорошо в этом конкретном случае, но также более расширяемо и предотвращает предупреждения типа raw. –

0

вы можете сделать так, а

public static <T> List<List<T>> sort(List<List<T>> list) { 
     list.sort((xs1, xs2) -> xs1.size() - xs2.size()); 
     return list; 
    }