簡體   English   中英

如何在Java中按其元素大小對ArrayList排序?

[英]How to sort an ArrayList by its elements size in Java?

所以我有一個List<String> L1 = new ArrayList<>() ,其中以下字符串為元素:

  • l,l,u,u。
  • r,u,d,l,d,l,u
  • l,u,d,r,r,r,r,r,u,d
  • l,u,r

我如何按照元素的大小對list進行排序,以便最終狀態L1像這樣:

  • l,u,r
  • l,l,u,u。
  • r,u,d,l,d,l,u
  • l,u,d,r,r,r,r,r,u,d

我嘗試使用Collections.sort ,但是按字母順序排序,這顯然不是我想要的。

我認為您正在尋找的是Collections.sort(java.util.List,java.util.Comparator) 使用它,您可以指定一個自定義Comparator ,該比較器根據長度而不是字母關系對字符串進行比較。

像這樣:

List<String> stringList = new ArrayList<String>();

// Fill the list

Comparator<String> stringLengthComparator = new Comparator<String>()
    {
        @Override
        public int compare(String o1, String o2)
        {
            return Integer.compare(o1.length(), o2.length());
        }
    };

Collections.sort(stringList, stringLengthComparator);

假設Java 8可用,並且該列表的類型為List<String>

list.sort(Comparator.comparing(String::length));

這將創建一個新的Comparator ,它使用字符串的長度作為排序的基礎,然后根據它進行排序。 該列表按從短到長的順序排序,但是如果不希望這樣...

list.sort(Comparator.comparing(String::length).reversed());

...將其反轉以首先對最長的字符串進行排序。

如果列表實際上是列表列表(問題尚不清楚),將使用List::size而不是String::length

您可以使用任何排序技術(氣泡,插入等)對Arraylist的元素進行排序。在這里,我使用氣泡排序對Arraylist的元素進行排序。

public class SortArray
{
    public static void main(String[] args)
    {   
        List<String> al = new ArrayList<String>();
        //add items to arraylist objects.
        al.add("l,l,u,u");
        al.add("r, u, d, l, d, l, u");
        al.add("l, u, d, r, r, r, r, r, u, d");
        al.add("l,u");
        al.add("l,u,r");

        //Use bubble sort here.
        for(int i=0;i<al.size();i++){
            for(int j=0;j<al.size()-i-1;j++){
                if( (al.get(j)).length() > (al.get(j+1)).length() ){
                    Collections.swap(al, j, j+1);
                }
            }
        }

        for(String str : al){
            System.out.println(str);
        }

    }
}

暫無
暫無

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

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