Java Arrays.binarySearch для двумерного int [] [] с Comparator.comparingInt () - PullRequest
0 голосов
/ 09 января 2020

У меня есть двумерный массив типа int, и я хочу использовать Arrays.binarySearch (), чтобы найти первый массив с указанным c вторым элементом, независимо от значения первого элемента, но я не могу выяснить правильный синтаксис.

Я думаю, что это должен быть тот же синтаксис, который используется в Arrays.sort () с пользовательским компаратором, но, очевидно, я неверен:)

Вот пример код:

int[][] a = new int[][]{ {1,2}, {2,4}, {3,6}, {9, -1} } ;

//first sort the array
Arrays.sort(a, Comparator.comparingInt((int[] i) -> i[1]));

// after sorting the array is now: {9,-1}, {1,2}, {2,3}, {3,6}
//this won't compile, should return 0 since a[0] is the only element with a second element equal to 2
int index = Arrays.binarySearch(a, 2, Comparator.comparingInt( (int[] i) -> i[1] ));

Я получаю ошибку:

Error:(14, 15) java: no suitable method found for binarySearch(int[][],int,java.util.Comparator<int[]>)
    method java.util.Arrays.<T>binarySearch(T[],T,java.util.Comparator<? super T>) is not applicable
      (inferred type does not conform to upper bound(s)
        inferred: java.io.Serializable
        upper bound(s): java.io.Serializable,int[],java.lang.Object)
    method java.util.Arrays.<T>binarySearch(T[],int,int,T,java.util.Comparator<? super T>) is not applicable
      (cannot infer type-variable(s) T
        (actual and formal argument lists differ in length))

Может ли кто-нибудь помочь мне с правильным синтаксисом Arrays.binarySearch ()?

Спасибо!

1 Ответ

0 голосов
/ 11 января 2020

@ Андреас любезно предложил это решение:

В этом обобщенном виде c, T - это int [], что означает, что вторым параметром должен быть int [], но Вы передаете Int. Измените второй параметр с 2 на новый int [] {0, 2}. --- Затем убедитесь, что вы получаете возвращаемое значение из binarySearch (...), иначе какой смысл.

Я не понял, что даже если вы передаете точное значение в качестве цели параметр, можно игнорировать его или просто использовать свойство цели для бинарного поиска. В моем примере я искал int [], где значение в индексе 1 равно 2, поэтому не имеет значения, какое значение мы имеем в индексе 0; мы можем установить его на что угодно.

...