我使用比较器来排序我的列表,但是我收到了这个错误。 这是我的代码。
// The comparators
Comparator<List<Integer>> comparator_rows = new Comparator<List<Integer>>() {
@Override
public int compare(List<Integer> o1, List<Integer> o2) {
if(o1.get(0) != o2.get(0))
return Integer.compare(o1.get(0), o2.get(0));
else if(o1.get(1) != o2.get(1))
return Integer.compare(o1.get(1), o2.get(1));
else if(o1.get(2) != o2.get(2))
return Integer.compare(o1.get(2), o2.get(2));
else if(o1.get(3) != o2.get(3))
return Integer.compare(o1.get(3), o2.get(3));
else if(o1.get(4) != o2.get(4))
return Integer.compare(o1.get(4), o2.get(4));
else if(o1.get(5) != o2.get(5))
return Integer.compare(o1.get(5), o2.get(5));
else if(o1.get(6) != o2.get(6))
return Integer.compare(o1.get(6), o2.get(6));
else
return Integer.compare(o1.get(7), o2.get(7));
}
};
Collections.sort(list, comparator_rows);
// test print
for(int i=0; i<100; i++){
Iterator<Integer> myListIterator = list.get(i).iterator();
System.out.print(i + " ");
while (myListIterator.hasNext()) {
Integer val = myListIterator.next();
System.out.print(val + " ");
}
System.out.println();
}
我得到了这个结果:
1 3000 299 1818 3000 3000 3000 1969 15426
1 3000 1499 1808 3000 3000 1174 1995 18813
1 3000 155 1927 3000 786 1107 783 26753
1 3000 1999 681 3000 355 1314 3000 28976
有谁知道为什么我没有订购结果起始维数2? 谢谢。
答案 0 :(得分:2)
您不能简单地将整数与==和!=进行比较。请改用Equals。
if(!o1.get(0).equals(o2.get(0)))
return Integer.compare(o1.get(0), o2.get(0));
请注意,如果List的Element为null,则可能导致NullPointerExceptions。
答案 1 :(得分:0)
您不需要为Integer编写比较器,因为Integer实现了Comparable接口。
足以分类:
Collections.sort(list);
但是如果您仍然需要创建一个带有一些自定义逻辑的自定义比较器,您可以尝试这样做:(ofc在比较器中写入您自己的逻辑)
Collections.sort(list, new Comparator<Integer>() {
public int compare(Integer o1, Integer o2) {
return Integer.compare(o1, o2);
}
});