2010-08-13 49 views
12

我有9個不同的ArrayList,我想要一個名列前茅5.Java:我如何按照它們的大小對多個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 2010-08-13 13:37:28

+0

最長的第一個。只是看到了賈斯汀的一個例子。我會先嚐試一下。謝謝你們=) – user419596 2010-08-13 13:46:09

回答

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 2010-08-13 13:55:39

+0

@pcjuzer,謝謝。我也是。但是這是針對這個問題的需要量身定做的。 – jjnguy 2010-08-13 13:58:45

+2

將'ArrayList'的所有實例更改爲'List '在這種特定情況下的工作方式也同樣如此,但它也更具可擴展性並避免了原始類型警告。 – 2010-08-13 14:47:11

0

你可以像這樣以及

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