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();
我想将 Number[][] 转换为 double[][]。上面的 lambda 不起作用,外部的 toArray 不编译。
Arrays.stream(intArray) :返回 Integer[] 的流
forEach :对于每个 Integer[],创建一个 Integer 流,将每个 Integer 转换为 double 并返回一个 double[]。
for each 创建了 double[],我认为外部的 toArray 会返回这个 double[] 的数组
我怎样才能让它发挥作用?
最佳答案
这里是你如何做到的:
double[][] doubleArray = Arrays.stream(intArray)
.map(arr -> Stream.of(arr).mapToDouble(Number::doubleValue).toArray())
.toArray(double[][]::new);
这可以分解如下:
首先你使用Arrays.stream
创建一个 Stream<Number[]>
.然后对于每个 Number[]
, 你创建一个 Stream<Number>
,并使用 mapToDouble
得到DoubleStream
然后 toArray()
得到double[]
大批。
final toArray
调用转换此 Stream<double[]>
进入double[][]
数组。
关于Java 8 Lambda 将 Number[][] 转换为 double[][],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29176959/