Java代码排序整数列表的列表

时间:2016-09-05 10:02:12

标签: java arrays list sorting integer

我使用比较器来排序我的列表,但是我收到了这个错误。 这是我的代码。

// 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? 谢谢。

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。

另请参阅:Java: Integer equals vs. ==

答案 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);
    }
});