我有一个数组列表,它像List<List<Integer>> res = new ArrayList();
经过一些处理后,我的数组列表将包含
[1,1,2]
[1,1]
[1,2]
[1]
[2]
这些元素,但我想排序的顺序看起来像
[1]
[1 1]
[1 1]
[1 1]
[1 1]
[1 2]
[2]
我所做的是
Collections.sort(res,new Comparator<List<Integer>>(){
public int compare(List<Integer> o,List<Integer> s){
int c=0;
//c=o.size().compareTo(s.size());
//if(c==0){
for(int i=0;i<Math.min(s.size(),o.size());i++){
c=o.get(i).compareTo(s.get(i));
if(c!=0) return c;
}
//}
return c;
}
});
但它不工作
尝试比较列表的大小,而不是在compare
的末尾返回c
:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
class Main {
public static void main(String[] args) {
List<List<Integer>> list = new ArrayList<>();
list.add(new ArrayList<>(Arrays.asList(1, 1, 2)));
list.add(new ArrayList<>(Arrays.asList(1, 1)));
list.add(new ArrayList<>(Arrays.asList(1, 2)));
list.add(new ArrayList<>(Arrays.asList(1)));
list.add(new ArrayList<>(Arrays.asList(2)));
System.out.printf("Before: %s%n", list);
Collections.sort(list, new Comparator<List<Integer>>() {
public int compare(List<Integer> o, List<Integer> s) {
for (int i = 0; i < Math.min(o.size(), s.size()); i++) {
int c = o.get(i).compareTo(s.get(i));
if (c != 0) {
return c;
}
}
return Integer.compare(o.size(), s.size());
}
});
System.out.printf("After: %s%n", list);
}
}
输出:
Before: [[1, 1, 2], [1, 1], [1, 2], [1], [2]]
After: [[1], [1, 1], [1, 1, 2], [1, 2], [2]]