【问题标题】:Cast an Arraylist of Doubles to ArrayList of Integers将双精度数组列表转换为整数数组列表
【发布时间】:2014-01-23 08:36:30
【问题描述】:

我正在尝试将 ArrayList 转换为 ArrayList。我实际上有一个 Double 中的标签列表,我想创建一个整数列表。我正在尝试将一个添加到另一个,但当然我需要一个铸造过程。

ArrayList<Integer> lab = new ArrayList<Integer>();
lab.addAll(labels.data); //labels.data is an Arraylist of Doubles.

如何将一个列表转换为另一个列表? 我试过这个一一添加:

ArrayList<Integer> lab = new ArrayList<Integer>();

     for (int i = 0; i < labels.data.size(); i++) {

            lab.set(i, labels.data.get(i).intValue());

    }

但我收到了 outOfBoundsError。

【问题讨论】:

标签: java arraylist casting


【解决方案1】:

您不能直接将List&lt;Double&gt; 转换为List&lt;Integer&gt;。循环每个Double 对象并调用intValue() 函数来获取它的整数部分。例如13.3 会给 13。我希望这就是你想要的。

for(Double d : labels.data){
    lab.add(d.intValue());
}

【讨论】:

  • +1 感谢您的回答,但我无法解释我编辑的代码中的错误。
  • 请不要移动球门柱。这回答了你原来的问题。添加新问题没有帮助。
  • @snakeplissken,您收到错误,因为set 函数用于替换列表中的值,而不是添加到列表中。正确使用的函数是add。见docs.oracle.com/javase/7/docs/api/java/util/…, E)
【解决方案2】:

首先,这是否需要特别是一个 ArrayList,或者这些是包装类而不是原语?如果没有,使用简单数组将避免装箱和拆箱以及存储大量对象的开销。

除此之外,您可能希望遍历列表并将每个项目转换为双精度(或双精度),然后将其添加到新数组(或 ArrayList)。没有针对此的批量操作。

【讨论】:

    【解决方案3】:

    因为您使用的是 set() 而不是 add(),所以您得到了 outOfBoundsError。 set() 是一个替换命令,要求该位置已经有一个对象。

    【讨论】:

      【解决方案4】:

      使用Arraylist&lt;Number&gt;NumberDoubleInteger 的父级,因此您可以将 Doubles 添加到列表中,并且 Number.intValue() 将在需要时将(自动装箱)转换为 Integer。

        ArrayList<Number> list;
      
        list.add(new Double(17.7));
        Integer i = list.get(0).intValue(); // 18, rounding.
      

      【讨论】:

      • 这很好。 OP,我建议这就是您要寻找的答案。
      • 已更改为列表编号。
      猜你喜欢
      • 2011-07-07
      • 1970-01-01
      • 2011-01-07
      • 1970-01-01
      • 2016-10-23
      • 2014-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多