问题描述
我正在尝试创建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打印该数组时,没有问题。
解决方法
实际上是功能性的。对流的操作会产生结果,但不会修改其源。例如,对从集合中获取的Stream进行过滤会生成一个不带过滤元素的新Stream,而不是从源集合中删除元素。
它返回一个DoubleStream
,它支持
顺序和并行聚合操作
这就是为什么它不起作用的原因。
编辑:第一部分不正确。替换为更正确的版本