Изменение Java ArrayList во время итерации по нему - PullRequest
5 голосов
/ 11 февраля 2012

хочу сделать что-то похожее на это

Однако я НЕ хочу, чтобы добавленные элементы повторялись. По сути, у меня есть основной arraylist, и я возвращаю итератор по arraylist. Итерируя с помощью этого итератора, я хочу добавить элементы в исходный массив. Как мне это сделать?

РЕДАКТИРОВАТЬ: проблема в том, что мне нужно, чтобы объекты в итераторе модифицировались итерационным кодом. Я не думаю, что клонирование массива будет работать ...

РЕДАКТИРОВАТЬ 2: Вот урезанная версия моего кода.

public class Map {
     // a bunch of code
     private ArrayList<Robot> robots;

     public Iterator<Robot> getRobots() {
          return robots.iterator();
     }

     public void buildNewRobot(params) {
          if(bunchOfConditions)
                robots.add(new Robot(otherParams);
     }

     // a bunch more code
}

А вот карта, используемая в другом классе.

for(Iterator<Robot> it = map.iterator(); it.hasNext();){
   Robot r = it.next();
   // a bunch of stuff here
   // some of this code modifies Robot r 

   if(condition)
       map.buildNewRobot(params);
}

Ответы [ 2 ]

5 голосов
/ 11 февраля 2012

Вы можете создать копию своего списка, перебрать копию и добавить данные в старый. Проблема в том, что вы не будете перебирать новые itens.

0 голосов
/ 11 февраля 2012

Это может помочь вам.

ArraList<E> a = new ArrayList<E>();
Iteratore<E> i = a.iterator();
loop(check condition){
    if(satisfied){
         a.add(E e);
    }
}
...