如何在Java中使用Lambda填充二维数组

问题描述

我正在尝试创建double的简单二维数组。 使用for循环让它看起来并不重要:

static public double[][] genMatrix(int n) {
    double mat[][]=new double[n][n];
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            mat[i][j]=generateDouble();
    return mat;
}

我想使用lambda表达式和forEach使其更平滑,但是我得到的数组中充满了零。为什么?

private static double[][] genSquareMatrix(int matrixDimension) {
    double matrix[][] = new double[matrixDimension][matrixDimension];
    Arrays.stream(matrix).forEach(x->Arrays.stream(x).forEach(y-> y = generateDouble()));
    return matrix;
}

顺便说一句,当我使用lambda打印该数组时,没有问题。

解决方法

关于documentation

实际上是功能性的。对流的操作会产生结果,但不会修改其源。例如,对从集合中获取的Stream进行过滤会生成一个不带过滤元素的新Stream,而不是从源集合中删除元素。

它返回一个DoubleStream,它支持

顺序和并行聚合操作

这就是为什么它不起作用的原因。

编辑:第一部分不正确。替换为更正确的版本