首先,我希望程序要按字母顺序按每个列表的第一个元素对列表进行排序。 然后将它们重新排序为原始顺序。 代码如下。
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]]
答案 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的排序和未排序副本。