[英]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::size
將List
映射到一個 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.