Java 将二维数组列表转换为二维浮点数组
我得到了这个错误: 类型流的方法mapToFloat(Float::parseFloat)未定义 我必须将此二维数组列表转换为二维浮点数组。尝试以下操作:Java 将二维数组列表转换为二维浮点数组,java,arrays,arraylist,java-stream,Java,Arrays,Arraylist,Java Stream,我得到了这个错误: 类型流的方法mapToFloat(Float::parseFloat)未定义 我必须将此二维数组列表转换为二维浮点数组。尝试以下操作: float[][] trainingData = lists.stream() .map(l -> l.stream() .mapToFloat(Float::parseFloat) .toArra
float[][] trainingData = lists.stream()
.map(l -> l.stream()
.mapToFloat(Float::parseFloat)
.toArray())
.toArray(float[][]::new);
如果您需要基元数组,我能想到的唯一方法就是您可能已经知道的(但为了完整起见,我会包括这些)
试试这个:
float[][] trainingData = lists.stream()
.map(l -> l.stream()
.mapToFloat(Float::parseFloat)
.toArray())
.toArray(float[][]::new);
如果您需要基元数组,我能想到的唯一方法就是您可能已经知道的(但为了完整起见,我会包括这些)
首先也是最重要的一点是,代码不起作用的原因是Java API中没有此类方法
mapToFloat
,但最重要的是没有FloatStream
如果您想通过流实现这一点,您的选择非常有限:
Float[][]]
而不是Float[][][]
,这可能并不理想,因为当您希望稍后在应用程序中执行某些计算时,它涉及装箱和拆箱瓶颈李>
这可以通过以下方式实现:
[10.0, 10.2]
[20.4, 2.6]
Float[][] trainingData = lists.stream()
.map(l -> l.toArray(new Float[0]))
.toArray(Float[][]::new);
double[][] trainingData = lists.stream()
.map(l -> l.stream().mapToDouble(Double::doubleValue).toArray())
.toArray(double[][]::new);
列表
而不是列表
来表示您的培训数据,然后您可以在需要时将其转换为双[][]
:[10.0, 10.2]
[20.4, 2.6]
Float[][] trainingData = lists.stream()
.map(l -> l.toArray(new Float[0]))
.toArray(Float[][]::new);
double[][] trainingData = lists.stream()
.map(l -> l.stream().mapToDouble(Double::doubleValue).toArray())
.toArray(double[][]::new);
但是,如果出于任何原因无法更改数据的初始类型,那么仍然可以转换为double[][]
这可以通过以下方式实现:
[10.0, 10.2]
[20.4, 2.6]
Float[][] trainingData = lists.stream()
.map(l -> l.toArray(new Float[0]))
.toArray(Float[][]::new);
double[][] trainingData = lists.stream()
.map(l -> l.stream().mapToDouble(Double::doubleValue).toArray())
.toArray(double[][]::new);
最终,您最好在这里使用命令式方法,即
进行循环。首先,您的代码不起作用的原因是Java API中没有此类方法mapToFloat
,但最重要的是,没有FloatStream
如果您想通过流实现这一点,您的选择非常有限:
累积到Float[][]]
而不是Float[][][]
,这可能并不理想,因为当您希望稍后在应用程序中执行某些计算时,它涉及装箱和拆箱瓶颈李>
这可以通过以下方式实现:
[10.0, 10.2]
[20.4, 2.6]
Float[][] trainingData = lists.stream()
.map(l -> l.toArray(new Float[0]))
.toArray(Float[][]::new);
double[][] trainingData = lists.stream()
.map(l -> l.stream().mapToDouble(Double::doubleValue).toArray())
.toArray(double[][]::new);
首先使用列表
而不是列表
来表示您的培训数据,然后您可以在需要时将其转换为双[][]
:
这可以通过以下方式实现:
[10.0, 10.2]
[20.4, 2.6]
Float[][] trainingData = lists.stream()
.map(l -> l.toArray(new Float[0]))
.toArray(Float[][]::new);
double[][] trainingData = lists.stream()
.map(l -> l.stream().mapToDouble(Double::doubleValue).toArray())
.toArray(double[][]::new);
但是,如果出于任何原因无法更改数据的初始类型,那么仍然可以转换为double[][]
这可以通过以下方式实现:
[10.0, 10.2]
[20.4, 2.6]
Float[][] trainingData = lists.stream()
.map(l -> l.toArray(new Float[0]))
.toArray(Float[][]::new);
double[][] trainingData = lists.stream()
.map(l -> l.stream().mapToDouble(Double::doubleValue).toArray())
.toArray(double[][]::new);
定义你自己的,你应该能够找到一些研究网站内
最终,您可能最好在这里使用命令式方法,即
循环。对于float,流没有好方法,您可以通过这种方式获得二维双数组
double[][] trainingData = lists.stream()
.map(l -> l.stream().mapToDouble(Float::doubleValue).toArray())
.toArray(double[][]::new);
对于float,并没有使用stream的好方法,您可以通过这种方法获得二维双数组
double[][] trainingData = lists.stream()
.map(l -> l.stream().mapToDouble(Float::doubleValue).toArray())
.toArray(double[][]::new);
lists.stream().flatMap(Collection::stream).toArray(float[]]::new)
您可以使用浮点[][][]
而不是浮点[][][]
吗?如果不是,您唯一的选择就是双for循环。包含float[]
数组的收集器。看到它,您可能会意识到使用循环更简单…lists.stream().flatMap(Collection::stream)
您可以使用浮点[][][]
而不是浮点[][][]
吗?如果不是,您唯一的选择就是双for循环。包含float[]
数组的收集器。看到它,您可能会意识到使用循环更简单…当您说“首先使用列表”
,在示例代码中使用Float::doubleValue
是矛盾的。@Holger我知道你从哪里来,但那段代码是指的,但如果出于任何原因无法更改数据的初始类型,那么你仍然可以转换为double[][。。我将试图澄清这一点。因此,实际上没有将List
转换为double[][]
的例子。但是当您将Float::doubleValue
更改为Number::doubleValue
时,无论OP是使用列表
还是列表
,当您说“首先使用列表”,在示例代码中使用Float::doubleValue
是矛盾的。@Holger我知道你从哪里来,但那段代码是指的,但如果出于任何原因无法更改数据的初始类型,那么你仍然可以转换为double[][。。我将试图澄清这一点。因此,实际上没有将List
转换为double[][]
的例子。但是,当您将Float::doubleValue
更改为Number::doubleValue
时,无论OP是使用List
还是List
,代码都会工作…