将Doubles的Arraylist转换为整数的ArrayList

时间:2014-01-23 08:36:30

标签: java arraylist casting

我正在尝试将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。

4 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:8)

您无法直接将List<Double>转换为List<Integer>。循环每个Double对象并调用intValue()函数以获取它的整数部分。对于例如13.3会给13.我希望那就是你想要的。

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

答案 2 :(得分:4)

使用Arraylist<Number>NumberDoubleInteger的父级,因此您可以将双打添加到列表中,并且Number.intValue()会在需要时将(自动装箱)转换为整数

  ArrayList<Number> list;

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

答案 3 :(得分:4)

您正在使用outOfBoundsError,因为您使用的是set()而不是add()。 set()是一个替换命令,需要在那个位置已经有一个对象。