2015-04-02 75 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