我发现使用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循环”吗?
答案 0 :(得分:3)
好的。代替遍历索引,然后按索引获取数组元素,您应该通过将数组变成流直接遍历数组元素:
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,并使用对象数组而不是更高级别的集合(如列表,集合等)