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

标签 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();

我想将 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/

相关文章:

c++ - 在 C++11 中实现干净的 lambda 函数

java - 如何在 Java Web 应用程序中显示 jFrame 表单 (NetBeans)

java - 更新 JComboBox

Java 下界通配符

javascript - 如何在不使用 .fill 的情况下创建具有一定可变长度和重复相同值的数组?

javascript - 如何根据 null 键值操作 JavaScript 数组对象数据

python - numpy.tile 非整数次数

c# - 使用 RemoveAll 从列表中删除项目

Java流根据double值对对象进行排序

java - 在java中处理大文件