Java 8 Lambda将Number [] []转换为double [] []

Nik*_*hil 7 java arrays lambda 2d java-8

Number[][] intArray = new Integer[][]{ {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
double[][] doubleArray = Arrays.stream(intArray)
                            .forEach(pArray -> Arrays.stream(pArray)
                                                .mapToDouble(d ->d.doubleValue())
                                                .toArray())
                            .toArray();
Run Code Online (Sandbox Code Playgroud)

我想将Number [] []转换为double [] [].上面的lambda不起作用,外部的toArray不能编译.

Arrays.stream(intArray):返回Integer []
forEach 的流 :对于每个Integer [],创建一个Integers流,将每个Integer转换为double并返回double [].
for each创建double [],我认为外部toArray将返回此double的数组[]
我怎样才能使它 工作?

Ale*_* C. 11

这是你如何做到的:

double[][] doubleArray = Arrays.stream(intArray)
                               .map(arr -> Stream.of(arr).mapToDouble(Number::doubleValue).toArray())
                               .toArray(double[][]::new);
Run Code Online (Sandbox Code Playgroud)

这可以分解如下:

首先你Arrays.stream用来创建一个Stream<Number[]>.然后为每个Number[],创建Stream<Number>,并使用mapToDouble获得DoubleStream,然后toArray()拿到double[]阵列.

最后的toArray调用将其Stream<double[]>转换为double[][]数组.