2014-01-23 32 views
2

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

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。

+0

@snake_plissken为什么这样做? – SK9

+0

迭代并构建一个新的'ArrayList'。 – Maroun

+1

你不能,你一个接一个地添加它们。可能重复[我怎样转换的ArrayList 到ArrayList的?](http://stackoverflow.com/questions/4581407/how-can-i-convert-arraylistobject-to-arrayliststring) – BackSlash

回答

8

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

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

+1对我来说感谢您的答案,但我可以'在我编辑的代码中解释错误。 –

+0

请不要移动门柱。这回答你的原始问题。添加新的问题没有帮助。 –

+4

@snakeplissken,您收到错误,因为'set'函数用于替换列表中的值,而不是添加到列表中。使用正确的函数是'add'。请参阅http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#set(int,E) – RandomQuestion

7

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

这且不说,你可能要循环列表,投每个项目为双(或双),然后将其添加到一个新的数组(或ArrayList中)。这没有批量操作。

4

使用Arraylist<Number>。一个NumberDoubleInteger的父母,这样你就能够双打添加到您的列表和Number.intValue()在需要时将其转换(自动装箱)为整数。

ArrayList<Number> list; 

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

这很好。 OP,我建议这是你正在寻找的答案。 –

+0

更改为清单编号。 – h22

4

因为您正在使用set()而不是add(),所以您正在获取OutOfBoundsError。 set()是替换命令,并要求那里已经有一个对象在那个位置。