java中int []的排序列表

时间:2016-05-23 22:50:14

标签: java arrays sorting arraylist

我想在java中对int数组进行排序,特别是这样:

1, 2
1, 3
2, 3
1, 4
2, 4
3, 1

应分类为:

1, 2
1, 3
1, 4
2, 3
2, 4
3, 1

我阅读了其他一些帖子,并且一直在尝试使用这样的内容来回答排序String[]

Collections.sort(listOfStringArrays,new Comparator<String[]>() {
        public int compare(String[] strings, String[] otherStrings) {
            return strings[1].compareTo(otherStrings[1]);
        }
    });

将其更改为:

Collections.sort(listOfIntArrays,new Comparator<int[]>() {
        public int compare(int[] ints, int[] otherInts) {
            return ints[0].compareTo(otherInts[0]);
        }
    });

但是这没有用,错误是返回行Cannot invoke compareTo(int) on the primitive type int

有人可以帮助我。

2 个答案:

答案 0 :(得分:4)

由于.compareTo(Integer)方法只能从Integer对象调用,因此您收到此错误是正常的。但在你的情况下,你有原始的int元素。

为了使您的比较有效,您可以像这样调用Integer.compare(int, int)方法:

而不是

return ints[0].compareTo(otherInts[0]);

使用

return Integer.compare(ints[0], otherInts[0]);

您可以查看Integer#compare方法说明

根据两个值进行排序

如果要对第一个和第二个值进行排序,可以通过创建两位数字(假设每个值都是0-9范围内的数字)将两个值转换为一个值。

我建议你这样做

return Integer.compare(ints[0] * 10 + ints[1], otherInts[0] * 10 + otherInts[1]);

答案 1 :(得分:1)

正如@tfosra所说,你应该使用Integer.compare(int, int)代替。但是,我建议在排序时使用不同的方法为第一个数组优先于第二个数组。如果第一个数组包含相等的值,请比较第二个数组中的值。这不会将范围限制在0-9,并且可能更具可读性。

return ints[0] != otherInts[0]
           ? Integer.compare(ints[0], otherInts[0])
           : Integer.compare(ints[1], otherInts[1]);