用流编写嵌套循环

gai*_*nco 0 functional-programming java-8 java-stream

我曾经写过这样的函数的替代品:

 int[][] createMatrix(int height, int width) {
   int[][] matrix = new int[height][width];
   for (int i = 0; i < height; ++i) {
      for (int j = 0; j < width; ++j) {
         matrix[i][j] = i * width + j;
      }
   }
   return matrix;
}
Run Code Online (Sandbox Code Playgroud)

但现在,我发现自己再也无法做到了.如何重构代码以在Java 8中使用流?

Ale*_*lex 6

IntStreams:

IntStream.range(0, height)
    .forEach(i -> IntStream.range(0, width)
            .forEach(j -> matrix[i][j] = i * width + j));
Run Code Online (Sandbox Code Playgroud)

你也可以使用Arrays#setAll:

Arrays.setAll(matrix, i -> {
    Arrays.setAll(matrix[i], j -> i * width + j);
    return matrix[i];
});
Run Code Online (Sandbox Code Playgroud)

或者结合它们:

IntStream.range(0, height)
    .forEach(i -> Arrays.setAll(matrix[i], j -> i * width + j));
Run Code Online (Sandbox Code Playgroud)