基于自定义比较器排序整数数组

时间:2013-12-11 02:38:10

标签: java sorting comparator

这很简单,但我显然错过了一些东西......

我有一个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

2 个答案:

答案 0 :(得分:3)

请务必将buffer属性声明为Integer[],因为您为Integer类型定义了比较器,而不是int类型的比较器 - 以及{{ 1}}接收sort()的方法仅适用于对象类型的数组,而不适用于基本类型的数组,例如Comparator

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

int[]

答案 1 :(得分:1)

Arrays.sort(T[], Comparator)是一种通用方法,其中第一个和第二个参数都使用类型变量。由于原语不能用作泛型类型参数,例如。 Comparator<int>,您无法传递int[]作为第一个参数。

您需要传递Integer[]

相关问题