2010-08-13 8 views
12

mam 9 różnych ArrayList i chcę mieć listę top 5.Java: Jak sortować wiele ArrayList według ich rozmiaru?

myślę sortowania tych ArrayLists ich rozmiarów.

Czy można to zrobić? Jeśli tak, jak mogę to osiągnąć?


Po kilku próbach w końcu udało mi się to sprawić, chcę tylko podzielić się nimi ze wszystkimi.

będzie lepiej, aby uzyskać rozmiar ArrayList i dodać go do wielkiego 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

Chcesz mieć pierwszy, na przykład najkrótszą i najdłuższą listę ostatni? – cHao

+0

najdłużej jako pierwszy. właśnie zobaczyłem przykład od Justina. spróbuję to najpierw. dzięki guys =) – user419596

Odpowiedz

24

Co można zrobić, jest następujący:

// 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 
    } 
}); 

To będzie posortować listę listy według długości każdej listy. Pierwszym elementem posortowanej listy będzie najdłuższa lista, a ostatnia będzie najkrótszą listą.

Następnie można przejrzeć pierwsze 5 list, aby zobaczyć, co było w pierwszej piątce.

Niektóre linki odsyłające:


zależności od tego jak masz ArrayLists przechowywany kod stworzyć List<ArrayList> będzie wyglądać mniej więcej tak:

// creates an ArrayList that holds ArrayLists 
List<ArrayList> allTheLists = new ArrayList<ArrayList>(); 
allTheLists.add(yourList1); 
allTheLists.add(yourList2); 
... 
allTheLists.add(yourList9); 
+1

+1, ale zamiast parametru ArrayList użyłbym jako parametru typu. – pcjuzer

+0

@pcjuzer, dzięki. Chciałbym też. Ale jest to dostosowane do potrzeb pytania. – jjnguy

+2

Zmiana wszystkich instancji 'ArrayList' na' List 'działa równie dobrze w tym konkretnym przypadku, ale także jest bardziej rozszerzalna i unika ostrzeżeń o typie surowym. –

0

można zrobić tak jak dobrze

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