【问题标题】:Java convert Arraylist<Float> to float[]Java 将 Arraylist<Float> 转换为 float[]
【发布时间】:2011-06-17 18:40:05
【问题描述】:

我该怎么做?

我有一个带有浮点元素的数组列表。 (Arraylist &lt;Float&gt;)

(float[]) Floats_arraylist.toArray()

它不工作。

无法从 Object[] 转换为 float[]

【问题讨论】:

标签: java arrays casting arraylist autoboxing


【解决方案1】:

自己循环。

List<Float> floatList = getItSomehow();
float[] floatArray = new float[floatList.size()];
int i = 0;

for (Float f : floatList) {
    floatArray[i++] = (f != null ? f : Float.NaN); // Or whatever default you want.
}

nullcheck 是避免NullPointerException 所必需的,因为Float(对象)可以是null,而float(原语)根本不能是null

如果您已经在使用 Java 8 并且最终使用 double[] 而不是 float[] 没问题,请考虑使用 Stream#mapToDouble()(没有像 mapToFloat() 这样的方法)。

List<Float> floatList = getItSomehow();
double[] doubleArray = floatList.stream()
    .mapToDouble(f -> f != null ? f : Float.NaN) // Or whatever default you want.
    .toArray();

【讨论】:

  • 真是个无赖。这在 C# 中曾经很容易。
  • 在这样的日子里,我讨厌 Java。
【解决方案2】:
【解决方案3】:

您可以使用 Apache Commons ArrayUtils.toPrimitive():

List<Float> list = new ArrayList<Float>();
float[] floatArray = ArrayUtils.toPrimitive(list.toArray(new Float[0]), 0.0F);

【讨论】:

  • 以上链接已损坏。我使用了以下导入:import org.apache.commons.lang3.ArrayUtils;
  • list.toArray(...) 将创建一个中间数组...而列表上的简单循环不会。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多