2015-04-02 71 views
2

首先,我希望程序要做的是按字母順序排列每個列表中第一個元素的列表。 然後將它們分類回原來的順序。 下面的代碼。如何按字母順序排列列表中的第一個元素?

ArrayList<ArrayList<String>> mylist = new ArrayList<ArrayList<String>>(); 
    List<String> List1 = new ArrayList<String>(); 
    List<String> List2 = new ArrayList<String>(); 
    List<String> List3 = new ArrayList<String>(); 
    List1.add("A"); 
    List2.add("B"); 
    List3.add("A"); 
    List1.add("C"); 
    List2.add("D"); 
    List3.add("E"); 
    mylist.add((ArrayList<String>) List1); 
    mylist.add((ArrayList<String>) List2); 
    mylist.add((ArrayList<String>) List3); 
    System.out.println(mylist.toString()); 

在一分鐘的打印是:

[[A,C],[B,d],[A,E]]

我想將它們進行排序,以便其結果是這樣的:

[[A,C],[A,E],[B,d]]

,然後能夠將它們回分類到其原來的形式:

[A,C],[B,d],[A,E]

+1

創建封閉列表的副本,並對該副本進行排序。您將擁有原始順序的原始列表,並按第一個元素排序副本。你不能「撤銷」一種排序:排序是不可逆的。 – 2015-04-02 16:27:23

回答

3

您可以使用自定義Comparator對列表進行排序。如果您使用的是Java 8,你可以做這樣的:

mylist.sort((l1, l2) -> l1.get(0).compareTo(l2.get(0))); 

注意,這將改變原來的名單,不過,並沒有辦法扭轉排序。相反,您應該創建一個副本並對副本進行排序。

例如:

List<List<String>> listToSort = new ArrayList<>(mylist); 
listToSort.sort((l1, l2) -> l1.get(0).compareTo(l2.get(0))); 
System.out.println(listToSort); 

輸出:

[[A, C], [A, E], [B, D]] 

注:

如果您使用的是Java 7及以下,你應該使用Collections.sort()並創建一個明確的Comparator

+0

注意lambda是在java 8中引入的,因此這些代碼片段不會在小於8的版本中編譯 – copeg 2015-04-02 16:38:18

+0

是的。我在回答中添加了一個註釋,以便警告OP。謝謝。 – 2015-04-02 16:42:28

+0

類型ArrayList >未定義方法sort(( List1, List2) - > {})我在行中獲取此錯誤:'listToSort.sort((List1,List2) - > List1。得到(0).compareTo(List2.get(0)));」 – 2015-04-02 16:43:47

1

由每個列表的第一個項目的字母順序進行排序,實現一個自定義比較:

Collections.sort(mylist, new Comparator<ArrayList<String>>(){ 

     @Override 
     public int compare(ArrayList<String> arg0, ArrayList<String> arg1) { 
      return arg0.get(0).compareTo(arg1.get(0)); 
     } 

    }); 

你不能顛倒這種順序,除非有特定的算法可以使用排序元素的原始順序。這就是說,爲了保持原來的順序,只需創建一個List的副本並對原始(或複製)進行排序,這會給您帶來一個排序和未排序的List副本。

+0

對不起,也許愚蠢的問題。上述代碼是在單獨的方法或類中嗎?我只是不確定我是如何將代碼實施到我的。 – 2015-04-02 17:07:31

+0

在一個方法中使用它 - 這將列表內聯排序。 Collections的排序方法是一種靜態方法,Comparator是一個匿名類。將List和Comparator傳遞給Collections.sort之後,List將被排序。 – copeg 2015-04-02 18:08:30