我想在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
有人可以帮助我。
答案 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]);