2014-01-23 8 views
2

Я пытаюсь преобразовать ArrayList в ArrayList. У меня есть список ярлыков в Double, и я хочу создать список целых чисел. Я пытаюсь добавить одно к другому, но, конечно, мне нужен процесс литья.Ввести арреалиста парных в 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 за меня благодарю за ответ, но я могу " t объясните ошибку в моем отредактированном коде. –

+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>. A Number является родителем как Double, так и Integer, поэтому вы можете добавить парный разряд в свой список, а Number.intValue() преобразует (autoboxing) в Integer, когда потребуется.

ArrayList<Number> list; 

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

Это хорошо. OP, я предлагаю, чтобы это был ответ, который вы искали. –

+0

Изменено на номер списка. – h22

4

Вы получаете outOfBoundsError, потому что вместо функции add() вы используете set(). set() является командой замены и требует, чтобы там уже был объект в этой позиции.

Смежные вопросы