Итерация и фильтрация массива 2D Java 8 - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть массив Array, например, так:

int[] array_example = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
Long count_array = Arrays.stream(array_example)
                      .filter(x -> x>5)
                      .count();

и массив 2d, например, так:

int[][] matrix_example = {{0, 1, 2, 3, 4}, {5, 6, 7, 8, 9}};
Long count_matrix = 0L;
for(int[] temp: matrix_example){
    for(int x_y: temp){
        if(x_y > 5)
           count_matrix++;
    }
}

Как я могу получить число элементов больше, чем x матрицы сJava 8 или выше?

Ответы [ 2 ]

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

Вот один из способов сделать это:

long count = Arrays.stream(matrix_example)
                   .mapToLong(a -> Arrays.stream(a).filter(x -> x > 5).count()).sum();
  • создает поток из matrix_example через Arrays.stream
  • отображает каждый массив на количество раз, данноеэлемент больше, чем 5 через mapToLong
  • , тогда мы берем все эти суммы и суммируем их, чтобы получить счет через sum
0 голосов
/ 21 декабря 2018

Вы можете создать IntStream матрицы, используя flatMapToInt, затем используйте filter и count как ранее:

Long count_matrix = Arrays.stream(matrix_example) // Stream<int[]>
        .flatMapToInt(Arrays::stream) // IntStream
        .filter(x_y -> x_y > 5) // filtered as per your 'if'
        .count(); // count of such elements
...