根据自定义比较器对整数数组进行排序

3

这是一件简单的事情,但很明显我漏掉了某些东西...

我有一个二维数组,其中包含从BufferedImage对象计算出来的颜色值的整数表示形式。我还有一种方法,根据整数值计算亮度值。

我想要根据亮度值对行进行排序。然而,我得到了...

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());
}

这里的问题是什么?毕竟,我只是根据输入计算两个整数值,并返回<0或>0。

你混淆了int[]和Integer[]。请注意,你可以从int自动装箱/拆箱到Integer,反之亦然,但是不能从Integer[]自动装箱/拆箱到int[],也不能反过来。 - Taylor
2个回答

3
请确保将buffer属性声明为Integer[],因为您已经为Integer类型定义了比较器,而不是int类型 - 接收Comparatorsort()方法仅适用于对象类型的数组,而不适用于原始类型(例如int)的数组。

请注意,int[]不能自动转换为Integer[],可能需要明确创建一个新的Integer[]并将int[]元素复制到其中:

int[] myIntArray = ...;
Integer[] myIntegerArray = new Integer[myIntArray.length];
for (int i = 0; i < myIntArray.length; i++)
    myIntegerArray[i] = myIntArray[i]; // autoboxing takes care of conversion

1
Arrays.sort(T[], Comparator) 是一个通用方法,其中第一和第二个参数都使用类型变量。由于原始类型不能用作通用类型参数,例如 Comparator<int>,因此您不能将 int[] 作为第一个参数传递。
您需要传递一个 Integer[]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接