将Java字符串流转换为float数组

詹卢卡(Gianluca):

我正在尝试找到一种优雅的方法来将Java转换Stream<String>为float数组。到目前为止,我已经提出了:

Float[] data = input.map(Float::valueOf).toArray(Float[]::new);

但是我实际上需要一个float[]and,当我尝试:

float[] data = input.map(x -> Float.parseFloat(x)).toArray(size -> new float[]);

我收到一个错误,无法转换Object[]float[],我不太了解。

我究竟做错了什么?

图灵85:

您的代码中有一个小错误,我们将首先修复该错误,以揭示手头的较大问题:

float[] data = input.map(x -> Float.parseFloat(x)).toArray(size -> new float[]);

应该:

float[] data = input.map(x -> Float.parseFloat(x)).toArray(size -> new float[size]);
                                                                             ^this is new

即使可能看起来不是这样,您的问题也仍然是泛型的。让我们看一下的定义Stream#toArray(...)

public <A> A[] toArray​(IntFunction<A[]> generator)

由于此方法在中是泛型的A,因此类型A不能为原始类型另一方面,您尝试设置Afloat(这是通过类型推断完成的,这就是为什么您在代码中看不到通用参数的原因)。编译器现在抱怨:

error: incompatible types: inference variable A has incompatible bounds
    float[] data = input.stream().map(x -> Float.parseFloat(x)).toArray(size -> new float[size]);
                                                                       ^
    equality constraints: float
    upper bounds: Object
  where A is a type-variable:
    A extends Object declared in method <A>toArray(IntFunction<A[]>)
1 error

该问题及其答案为将Stringastream 转换为的问题提供了解决方案/解决方法float[]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章