簡體   English   中英

Java:如何按大小對列表列表進行排序?

[英]Java: How to sort List of Lists by their size?

我有 9 個不同的ArrayList ,我想要一個前 5 個列表。

我正在考慮按它們的大小對這些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));   
}

您可以執行以下操作:

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

你也可以這樣做

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

List 上可用的sort方法需要一個Comparator 該比較器可以使用Comparator.comparing方法創建,並具有其他特殊實現,包括用於提取和比較 int - Comparator.comparingInt

import static java.util.Comparator.comparingInt;
...
List<List<Integer>> listOfLists = ...
listOfLists.sort(comparingInt(List::size));

List::sizeList映射到一個 int(列表的大小)並使用它來創建一個新的Comparator可用於我們的排序目的。

如果你想要最大的第一

listOfLists.sort(comparingInt(List::size).reversed());

轉儲前 5 個(切換到 Java 8 流):

listOfLists.stream()
  .sorted(comparingInt(List::size).reversed())
  .limit(5)
  .forEachOrdered(System.out::println);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM