使用流计算二维数组中的特定字符

时间:2017-07-13 14:10:14

标签: java arrays java-8 java-stream

我想计算一个字符的出现次数(例如空格:' ' )在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 个答案:

答案 0 :(得分:8)

我相信这个答案会更具表现力:

int freeSpaces = (int) Arrays.stream(board)
                             .map(CharBuffer::wrap)
                             .flatMapToInt(CharBuffer::chars)
                             .filter(i -> i == ' ')
                             .count();

答案 1 :(得分:2)

这个怎么样?

//                      v--- create a Stream<char[]>             
int spaces = (int) Stream.of(board)
                          .flatMapToInt(cells->IntStream.range(0, cells.length)
                          .filter(i -> cells[i] == ' '))
                          .count();