Нахождение нечетного числа из двумерного целочисленного массива с помощью Stream - PullRequest
0 голосов
/ 24 декабря 2018

Я пытаюсь код следующим образом

int[][] mat = new int[][]{new int[]{2,4,6}, new int[]{8,9,12}};
int oddInAll = Arrays.stream(mat).filter(i -> i%2 != 0).findFirst().getAsInt();

Но это дает мне ошибку

|Ошибка: |недопустимые типы операндов для бинарного оператора '%' |первый тип: int [] |второй тип: int |int oddInAll = Arrays.stream (mat) .filter (i -> i% 2! = 0) .findFirst (). getAsInt ();|
^ --- ^

|Ошибка: |не могу найти символ |символ: метод getAsInt () |
int oddInAll = Arrays.stream (mat) .filter (i -> i% 2! = 0) .findFirst (). getAsInt ();|
^ ------------------------------------------------------------- ^

Что я пропустил на этот раз?

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

Используйте flatMapToInt вместо:

int oddInAll = Arrays.stream(mat).flatMapToInt(Arrays::stream)
                     .filter(i -> (i % 2 != 0)).findFirst().getAsInt();
0 голосов
/ 24 декабря 2018

Ну, Arrays.Stream в этом случае приведет к тому, что ваш i будет иметь тип int[], который нельзя использовать в filter.

. Я бы предложил использовать аналогичный пример:Ранее для этой операции также использовался d.

int oddOrMin = Stream.of(arr) // Stream<int[]> and not integers
                     .flatMapToInt(Arrays::stream) // IntStream
                     .filter(i -> i % 2 != 0)
                     .findFirst() // OptionalInt
                     .orElse(Integer.MIN_VALUE); //default to some value

Сходство

Синтаксис итерации по одномерному и двумерному массиву остается неизменным в приведенном выше решении.

Разница

Решение , которым я поделился для одномерного массива, использует Stream.of(T t), где T равно int[] как указано во входных данных.С другой стороны, решение, предложенное для двумерного массива, использует Stream.of(T... values), где снова int[][] считается int[]... и, следовательно, T оценивается как int[] чтобы наконец создать Stream<int[]>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...