这很简单,但我显然错过了一些东西......
我有一个2D数组,它包含从BufferedImage对象计算的Color值的整数表示。我还有一种方法可以根据整数值计算亮度值。
我想根据亮度值对行进行排序。但是,我正在
sort(java.lang.Integer[], Comparator<? super Integer>) in Arrays cannot be applied
to (int[], IntComparator)
我的比较方法:
private class IntComparator implements Comparator<Integer>{
@Override
public int compare(Integer x, Integer y){
return (PhotoUtils.getBrightnessValue(x) <= PhotoUtils.getBrightnessValue(y)) ? x : y;
}
}
在我的sortRow方法中,我有
public void sortRow(int row) {
Arrays.sort(this.buffer[row], new IntComparator());
}
这是什么问题?毕竟,我只是根据输入计算两个整数值并返回&lt; 0或&gt; 0
答案 0 :(得分:3)
请务必将buffer
属性声明为Integer[]
,因为您为Integer
类型定义了比较器,而不是int
类型的比较器 - 以及{{ 1}}接收sort()
的方法仅适用于对象类型的数组,而不适用于基本类型的数组,例如Comparator
。
请注意,int
无法自动转换为int[]
,可能需要明确创建新的Integer[]
并将Integer[]
元素复制到其中:
int[]
答案 1 :(得分:1)
Arrays.sort(T[], Comparator)
是一种通用方法,其中第一个和第二个参数都使用类型变量。由于原语不能用作泛型类型参数,例如。 Comparator<int>
,您无法传递int[]
作为第一个参数。
您需要传递Integer[]
。