2013-09-04 9 views
0

Хорошо, я не знаю, почему, но я думаю, что мне не хватает чего-то очень простого, чтобы решить эту проблему. Вот моя проблема: У меня есть метод createPublisherRequestObject (String str), который принимает строковый аргумент и возвращает список объекта ReportRequest. Обычно для данной String будут созданы 65 объектов. У меня есть другой метод getTimeFrameValues ​​(), который возвращает arraylist строки. Обычно этот метод возвращает около 15 строк в arraylist. Так что в принципе я бы повторял цикл в 15 раз (Num of String), а затем для каждой итерации я буду вызывать метод createPublisherRequestObject для создания 65 объектов. В конце этого я хотел иметь список из 65 * 15 объектов. Вот мой код -Добавление объектов в ArrayList на итерации

ArrayList<String> timeList = er.getTimeFrameValues(); 
List<ReportRequest> reqList = new ArrayList<>(); 
for (Iterator iterator = timeList.iterator(); iterator.hasNext();) { 
    String string = (String) iterator.next(); 
    reqList = rj.createPublisherRequestObject(string); 
} 
log.info("Final List Size "+reqList.size()); 

Но это возвращает 65

Пожалуйста, помогите !!!

Спасибо, Pratik

+2

Почему вы использовали такой сложный цикл вместо записи: 'for (String string: timeList)'? Кстати, строка такая плохое имя переменной ... – Julien

ответ

4

Каждый раз, когда вы идете по списку, вы заменаreqList. Кажется, что вы хотите сделать это либо reqList.add, либо reqList.addAll.

Кроме того, если вы уже знаете, сколько объектов вы создаете в строку, вы получите гораздо более высокую производительность за счет создания ArrayList соответствующего размера:

new ArrayList<>(65 * timeList.size()) 

Наконец, так как вы используя Java 7, используйте расширенный цикл for; это более читаемо:

for(String string: timeList) 
    reqList.addAll(rj.createPublisherRequestObject(string)); 
+0

Я всегда получаю выбивание на 30 секунд lol – Cruncher

+0

+1 для оптимизации предопределенной емкости. – Cruncher

+0

^^ же здесь, нужно научиться вводить быстрее на клавиатуре – Marc

2

Вы переназначаете reqList на каждой итерации. Вам нужно добавить.

reqList.addAll(rj.createPublisherRequestObject(string)); 

Должно работать.

+0

Кранчер, спасибо помощник. Вы спаситель. – Pratik

1

У вас есть 65, потому что вы заменяете свой reqlist результатом вызова rj.createPublisherRequestObject(string) вместо использования метода addAll(). Таким образом, вы не добавляете элементы, а перезаписываете содержимое reqlist. Поэтому в конце списка были перезаписаны в 15 раз и содержит только 65 элементов ...

0
String string = (String) iterator.next(); 
reqList = rj.createPublisherRequestObject(string); 

здесь вы присваиваете результат получили от rj.createPublisherRequestObject(String) до reqList, так что в конце itteration у вас есть последнее reurned значение.

Вместо этого используйте reqList.addAll(rj.createPublisherRequestObject(string));, который будет продолжать добавление результата list к reqList, в конце вы получите все значение.

0

Вам необходимо сделать reqList.add (rj.createPublisherRequestObject (string)); Вы не добавляли, поэтому он возвращает последнее значение итерации.

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