【发布时间】:2020-11-05 01:07:08
【问题描述】:
我正在尝试创建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 打印该数组时没有问题。
【问题讨论】:
-
您只得到零,因为您没有向数组写入任何内容。您只需迭代所有默认初始化为零的元素,并始终用
generateDouble覆盖局部变量y。 -
@akuzminykh 我希望它比我在大学时的讲师版本更短,但现在看来他知道自己在做什么
-
是的,只要保持简单并在一开始就使用循环。您接受的答案是顺便说一句。错误的。它解决了正确的问题,但没有回答您的问题。
-
@akuzminykh 你能进一步解释一下吗? Java Streams 不会以任何方式修改其源代码。取自here:本质上是功能性的。对流的操作会产生结果,但不会修改其源。例如,过滤从集合中获得的 Stream 会生成一个没有过滤元素的新 Stream,而不是从源集合中删除元素。