我发现使用 Java Streams 创建大型对象数组是可行的,如下所示:double[] doubleArray = {array of double};DoubleWrapper[] wrapperArray = new DoubleWrapper[doubleArray.length;IntStream .range(0, doubleArray.length) .forEach(index -> wrapperArray.setElement(index, myArray[index]));有用。但是我读到依赖“副作用”是不好的做法,但应该得到我想要的结果作为流的输出。我想从对象中提取数组时我越来越接近这个了:DoubleWrapper[] wrapperArray = {array of DoubleWrapper}double[] mArray = IntStream .range(0, divisor.size()) .mapToDouble(index -> wrapperArray.getElement(index)) .toArray();有没有更好的方法来使用流来做到这一点?如果没有,我应该回到使用“for 循环”吗?
1 回答
四季花海
TA贡献1811条经验 获得超5个赞
当然。不是循环遍历索引,然后通过索引获取数组元素,您应该直接遍历数组元素,将数组转换为流:
double[] mArray = Stream.of(wrapperArray)
.mapToDouble(DoubleWrapper::getValue)
.toArray();
或者
DoubleWrapper[] wrapperArray = DoubleStream.of(doubleArray)
.mapToObj(DoubleWrapper::new)
.toArray(length -> new DoubleWrapper[length])
但最大的错误可能是拥有自己的 DoubleWrapper 类而不是使用 java.lang.Double,并且使用对象数组而不是更高级别的集合(如 Lists、Sets 等)
添加回答
举报
0/150
提交
取消
