2013-12-11 8 views
2

Это что-то простое, но я явно не хватает что-то ....Сортировка целочисленный массив на основе пользовательского компаратора

У меня есть 2D массив, содержащий целые представления значений цвета, которые были вычислены из объекта 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

+0

Вы объединяете int [] и Integer []. Обратите внимание, что вы можете autobox/auto-unbox от int до Integer и наоборот, но не от Integer [] до int [], и не наоборот. – Taylor

ответ

3

Убедитесь объявить атрибут buffer как Integer[], так как вы определили компаратор для Integer типа, не для типа int - и метод sort(), который принимает Comparator, будет работать только для массивов типов объектов, а не для массивов примитивных типов, таких как 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[].

Смежные вопросы