首先,我希望程序做的是按字母顺序按每个列表的第一个元素对列表进行排序。然后将它们排序回原来的顺序。代码如下。
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());
Run Code Online (Sandbox Code Playgroud)
此刻的印刷品是:
[[A, C], [B, D], [A, E]]
我想对它们进行排序,结果如下:
[[A, C], [A, E], [B, D]]
然后能够将它们排序回其原始形式:
[[A, C], [B, D], [A, E]]
您可以使用自定义Comparator. 如果您使用的是 Java 8,您可以这样做:
mylist.sort((l1, l2) -> l1.get(0).compareTo(l2.get(0)));
Run Code Online (Sandbox Code Playgroud)
请注意,这将修改原始列表,但无法反转排序。相反,您应该创建一个副本并对副本进行排序。
例如:
List<List<String>> listToSort = new ArrayList<>(mylist);
listToSort.sort((l1, l2) -> l1.get(0).compareTo(l2.get(0)));
System.out.println(listToSort);
Run Code Online (Sandbox Code Playgroud)
输出:
[[A, C], [A, E], [B, D]]
Run Code Online (Sandbox Code Playgroud)
笔记:
如果您使用的是 Java 7 及更低版本,则应使用Collections.sort()并创建一个显式的Comparator.