[英]Stream to populate 2D array of doubles
I have the following loop that I would like to convert to a parallel stream.我有以下循环,我想将其转换为并行流。 Note that
mbbVariance
and nbbVariance
both return a double
.请注意,
mbbVariance
和nbbVariance
都返回double
。
double[][] outMBB = new double[rows][maxBlockSize];
double[][] outNBB = new double[rows][maxBlockSize];
for (int j = 0; j < rows; j++) {
for (int m = 0; m < maxBlockSize; m++) {
outMBB[j][m] = mbbVariance(timeSeries[j], m + 1, alpha);
outNBB[j][m] = nbbVariance(timeSeries[j], m + 1, alpha);
}
}
My best attempt was我最好的尝试是
double[][] outMBB = IntStream.range(0, rows)
.parallel()
.mapToDouble(j -> (
IntStream.range(0, maxBlockSize)
.mapToDouble(m -> mbbVariance(timeSeries[j], m + 1, alpha))
.toArray(double[]::new)
)
)
.toArray(double[][]::new);
double[][] outNBB = IntStream.range(0, rows)
.parallel()
.mapToDouble(j -> (
IntStream.range(0, maxBlockSize)
.mapToDouble(m -> nbbVariance(timeSeries[j], m + 1, alpha))
.toArray(double[]::new)
)
)
.toArray(double[][]::new);
but this does not work.但这不起作用。
I'm really not a pro with streams, this solution is more of a starting point than a polished product.我真的不是流的专业人士,这个解决方案更像是一个起点,而不是一个完美的产品。
double[][] outMBB = new double[rows][maxBlockSize];
double[][] outNBB = new double[rows][maxBlockSize];
IntStream.range(0, rows).forEach(i -> IntStream.range(0, maxBlockSize).forEach(
m -> { outFSMBB[j][m] = mbbVariance(timeSeries[j], m + 1, alpha);
outFSNBB[j][m] = nbbVariance(timeSeries[j], m + 1, alpha);
}));
This solution is more of a simulation of what you did with loops than a real utilisation of what streams are capable of.这个解决方案更多的是模拟你用循环所做的事情,而不是真正利用流的能力。
You were really close with your first attempt.你的第一次尝试真的很接近。
int rows = 4;
int columns = 5;
double[][] outNBB = IntStream.range(0, rows).mapToObj(
j -> IntStream.range(0, columns).mapToDouble(
m -> Math.random()
).toArray()
).toArray(double[][]::new);
You pretty much just needed to mapToObj
and not mapToDouble
since a double[][] is actually an array of objects where each object is a double[].您几乎只需要
mapToObj
而不是mapToDouble
因为 double[][] 实际上是一个对象数组,其中每个对象都是一个 double[]。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.