【问题标题】:Sort integer array based on custom comparator基于自定义比较器对整数数组进行排序
【发布时间】:2013-12-11 02:38:09
【问题描述】:

这很简单,但我显然遗漏了一些东西......

我有一个二维数组,其中包含从 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。

【问题讨论】:

  • 您将 int[] 和 Integer[] 混为一谈。请注意,您可以从 int 到 Integer 自动装箱/自动拆箱,反之亦然,但不能从 Integer[] 到 int[],反之亦然。

标签: java sorting comparator


【解决方案1】:

确保将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

【讨论】:

    【解决方案2】:

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

    您需要传递Integer[]

    【讨论】:

      猜你喜欢
      • 2011-04-11
      • 1970-01-01
      • 2020-02-05
      • 1970-01-01
      • 1970-01-01
      • 2013-06-28
      • 2018-04-25
      相关资源
      最近更新 更多