我想对ArrayList
中的ArrayList<Integer>
进行排序。
ArrayList<ArrayList<Integer>> allres = new ArrayList<ArrayList<Integer>>();
Collections.sort(allres, new Comparator<ArrayList<Integer>>() {
public int compare(ArrayList<Integer> a, ArrayList<Integer> b) {
for (int i = 0; i < a.size(); i++) {
if (a.get(i) < b.get(i)) {
return -1;
} else if (a.get(i) == b.get(i)) {
continue;
} else {
return 1;
}
}
return -1;
}
});
但是对于某些输入,它没有给出字典排序的结果。
答案 0 :(得分:1)
包含1
或-1
的比较器函数容易出错。
相反,您应该这样写:
public static int lexicographically(List<Integer> a, List<Integer> b) {
for (int i = 0, end = Math.min(a.size(), b.size()); i < end; i++) {
int res = Integer.compare(a.get(i), b.get(i));
if (res != 0)
return res;
}
return Integer.compare(a.size(), b.size());
}
这种编写比较器函数的样式可以防止各种常见错误,例如从不返回0。
这种样式中最重要的模式是: