Страницы

Поиск по вопросам

понедельник, 11 февраля 2019 г.

Как отсортировать int[] со своим компаратором?

Массив Integerов сортируется, а вот с массивом intов что-то не получается:
https://ideone.com/tXfCql
class Ideone { public static void main (String[] args) throws java.lang.Exception { Integer a[] = {1,2,3,4,5,6,7}; int b[] = {1,2,3,4,5,6,7};
Arrays.sort(a, (x,y) -> y-x); //Arrays.sort(b, (x,y) -> y-x);
System.out.println(Arrays.toString(a)); System.out.println(Arrays.toString(b)); } }
Если раскомментировать сортировку массива b, то будет ошибка
Main.java:11: error: no suitable method found for sort(int[],(x,y)->y - x) Arrays.sort(b, (x,y) -> y-x); ^ method Arrays.sort(T#1[],Comparator) is not applicable (inference variable T#1 has incompatible bounds equality constraints: int upper bounds: Object) method Arrays.sort(T#2[],int,int,Comparator) is not applicable (cannot infer type-variable(s) T#2 (actual and formal argument lists differ in length)) where T#1,T#2 are type-variables: T#1 extends Object declared in method sort(T#1[],Comparator) T#2 extends Object declared in method sort(T#2[],int,int,Comparator) Note: Some messages have been simplified; recompile with -Xdiags:verbose to get full output 1 error
Как его правильно отсортировать с кастомным компаратором?


Ответ

Массив Integerов сортируется, а вот с массивом intов что-то не получается
И правильно, что не получается, так как дженерики (коим является Comparator) не параметризуются примитивами, а автобоксинг для массивов не работает.
Как отсортировать int[] со своим компаратором?
Так, как хотите Вы (непосредственно с помощью Arrays.sort(...)) -- никак, но есть множество альтернативных решений, которые перечислены в соседнем ответе

Комментариев нет:

Отправить комментарий