Java:如何按大小对多个 ArrayList 进行排序?

Posted

技术标签:

【中文标题】Java:如何按大小对多个 ArrayList 进行排序?【英文标题】:Java: How do I sort multiple ArrayList by their size? 【发布时间】:2011-03-29 11:34:55 【问题描述】:

我有 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));   

【问题讨论】:

您想拥有,例如,最短的列表在前,最长的在后? 最长的第一个。刚刚看到贾斯汀的一个例子。我先试试。谢谢大家=) 【参考方案1】:

你可以做的是:

// 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 个是什么。

一些参考链接:

Sorting tutorial Collections Javadoc Comparator Javadoc

根据您存储ArrayLists 的方式,创建List&lt;ArrayList&gt; 的代码如下所示:

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

【讨论】:

+1,但我会使用 List 而不是 ArrayList 作为类型参数。 @pcjuzer,谢谢。我也会的。但这是根据问题的需要量身定制的。 ArrayList 的所有实例更改为List&lt;?&gt; 在这种特定情况下同样有效,但也更具可扩展性并避免了原始类型警告。【参考方案2】:

你也可以这样做

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

【讨论】:

以上是关于Java:如何按大小对多个 ArrayList 进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

如何按对象属性对 ArrayList 进行排序? [复制]

Java:如何将 ArrayList 拆分为多个小的 ArrayList?

如何用java对excel进行自定义排序?

在Java中按属性值对对象ArrayList进行排序

按对象属性对对象的 ArrayList 进行排序

按字母顺序排序arraylist(不区分大小写)