如何按字母顺序对列表列表的第一个元素进行排序?

时间:2015-04-02 16:22:22

标签: java list sorting

首先,我希望程序要按字母顺序按每个列表的第一个元素对列表进行排序。 然后将它们重新排序为原始顺序。 代码如下。

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]]

2 个答案:

答案 0 :(得分:4)

您可以使用自定义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

答案 1 :(得分: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的排序和未排序副本。