使用Java Stream创建对象数组

时间:2018-10-27 05:27:59

标签: java java-stream

我发现使用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 个答案:

答案 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,并使用对象数组而不是更高级别的集合(如列表,集合等)