Java 将二维数组列表转换为二维浮点数组

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

我得到了这个错误:

类型流的方法mapToFloat(Float::parseFloat)未定义

我必须将此二维数组列表转换为二维浮点数组。

尝试以下操作:

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
    ,代码都会工作…