我正在尝试找到一种优雅的方法来将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[]
,我不太了解。
我究竟做错了什么?
您的代码中有一个小错误,我们将首先修复该错误,以揭示手头的较大问题:
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
不能为原始类型。另一方面,您尝试设置A
为float
(这是通过类型推断完成的,这就是为什么您在代码中看不到通用参数的原因)。编译器现在抱怨:
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
该问题及其答案为将String
astream 转换为的问题提供了解决方案/解决方法float[]
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句