Я получаю ошибку при сортировке массива с помощью следующего кода

#java #arrays #sorting #comparator

#java #массивы #сортировка #компаратор

Вопрос:

Я могу получить выходные данные для этого:

 int arr[][]={{1,2},{2,3},{3,4},{1,3}};
Arrays.sort(arr,(a,b)->(b[0]-a[0]));
  

Но он показывает ошибку для этого:

 int arr[]={1,2,3,4,5,6};
Arrays.sort(arr,(a,b)->(b-a));
  
 Error:     method Arrays.<T#1>sort(T#1[],Comparator<? super T#1>) is not applicable
  

Чего мне здесь не хватает?

Ответ №1:

Не существует варианта, Arrays.sort() который принимал бы an int[] и a Comparator , что неудивительно, учитывая, что вы не можете определить a Comparator<int> (параметры универсального типа должны быть ссылочными типами).

Если вы измените свой массив на Integer[] , он будет работать:

 Integer[] arr={1,2,3,4,5,6};
Arrays.sort(arr,(a,b)->(b-a));
  

Ваш первый фрагмент работает, потому что тип элемента вашего первого (2D) массива — int[] (array of int s), а массивы являются ссылочными типами. Следовательно, он соответствует сигнатуре public static <T> void sort(T[] a, Comparator<? super T> c) метода.