Подсчет конкретных символов в двумерном массиве c использованием потока
Я хотел бы подсчитать вхождения символа (например, пробел:' '
) в 2D массиве, используя поток. Я пытался найти решение. Вот мой код, используя вложенные циклы:
public int countFreeSpaces() {
int freeSpaces = 0;
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
if (board[j][i] == ' ') freeSpaces++;
}
}
return freeSpaces;
}
2 ответов
Я считаю, что этот ответ немного более выразительной:
int freeSpaces = (int) Arrays.stream(board)
.map(CharBuffer::wrap)
.flatMapToInt(CharBuffer::chars)
.filter(i -> i == ' ')
.count();
Как насчет этого?
// v--- create a Stream<char[]>
int spaces = (int) Stream.of(board)
.flatMapToInt(cells->IntStream.range(0, cells.length)
.filter(i -> cells[i] == ' '))
.count();