【问题标题】:Transform array to list将数组转换为列表
【发布时间】:2011-11-26 23:04:02
【问题描述】:

我有以下代码片段:

public void doSomething() {
  float array[] = new float[2];
  array[0] = (float) 0.0;
  array[1] = (float) 1.2;
  someMethod(array);
}

public void someMethod(Object value) {
   //need to convert value to List<Float>
}

正如您在上面看到的,我想将作为数组(但作为对象传递)的 value 变量转换为 List。 我按照这里的建议尝试了以下操作:Create ArrayList from array

    new ArrayList<Float> (Arrays.asList(value));

但是,它不能编译。

有什么提示吗?

【问题讨论】:

  • 当问题涉及编译错误时,包含该错误消息会很有帮助,就像显示运行时错误的堆栈跟踪一样。

标签: java arrays collections


【解决方案1】:
public void someMethod(Object value) {
    float[] array = (float[]) value;
    List<Float> result = new ArrayList<Float>(array.length);
    for (float f : array) {
        result.add(Float.valueOf(f));
    }
    // ...
}

不过,我不知道您为什么不将 value 参数定义为 float[] 而不是 Object

【讨论】:

  • +1 你不需要 Float.valueOf,result.add(f) 可以工作,因为它是自动装箱的。
  • 确实如此。但是当我回答关于原始与对象问题的问题时,我更喜欢明确转换,以避免更加混淆 OP。生成的字节码应该完全一样。
  • 确实一模一样。
  • 我不能使用 float[] 代替 Object,因为该方法来自 3rd 方 API。
【解决方案2】:

[根据 JB Nizet 的更正更新。] 如果您对数组使用 Float 而不是 float,则它会工作如果编译器知道 value 是一个数组 - 它不知道。添加演员表:

new ArrayList<Float> (Arrays.asList((Float[])value));

或者只是将value 的参数类型更改为Float[],并省略强制转换。

【讨论】:

  • 现在我们有 ClassCastException: [F cannot be cast to [Ljava.lang.Float
  • @Matthew - 注意第一行 - 如果数组使用 Float 而不是 float。如果不清楚,我的意思是应该声明为:Float[] array = new Float[2];
  • @Ed 但这不是最初的问题。
  • @Matthew - 我看到你对其他答案发表了同样的评论。您假设 OP 不能或不想更改类型。我假设他可以而且不在乎它是什么。我知道,总的来说,坚持原始问题的前提很重要,但我认为这有点矫枉过正。如果您真的认为他很可能在乎,您可以考虑询问 OP。
  • @Ed。我只是指出它不满足最初的问题。您指出他可以更改数组是完全可以接受的。
【解决方案3】:

如果您想将float[] 视为List&lt;Float&gt;,那么Guava 的Floats.asList 方法将完成工作。

【讨论】:

    【解决方案4】:

    float 更改为Float,因为Arrays.asList(T...a) 不能返回List&lt;float&gt;,因为Java 原始类型不能作为参数传递给泛型类型。

    public void doSomething() {
        Float array[] = new Float[2];
        array[0] = 0.0f;
        array[1] = 1.2f;
        someMethod(array);
    }
    
    public void someMethod(Object value) {
        List<Float> list = new ArrayList<Float> (Arrays.asList((Float[])value));
        System.out.println(list);
    }
    

    打印

    [0.0, 1.2]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-06
      • 2019-01-23
      • 1970-01-01
      • 2011-08-13
      相关资源
      最近更新 更多