2012-02-11 15 views
5

Quiero hacer algo similar a thisModificación de Java ArrayList al iterar sobre ella

Sin embargo, no quiero que los elementos añadidos que se repiten a lo largo. Básicamente tengo una lista de arrays subyacente, y devuelvo un iterador sobre la lista de arrays. Al iterar usando ese iterador, quiero agregar elementos a la lista de arrays original. ¿Cómo hago esto?

EDITAR: El problema con esto es que necesito los objetos en el iterador modificado por el código de iteración. No creo que la clonación de la lista de arrays funcionará ...

EDIT2: Aquí hay una versión simplificada de mi código.

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 
} 

Y aquí está el mapa utilizado en otra clase.

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); 
} 
+1

sería útil si proporcionó el código correspondiente – ggreiner

+0

Agregó el código. Perdón por omitirlo. – BlackSheep

Respuesta

5

Puede crear una copia de su lista e iterar sobre la copia y agregar datos a la anterior. El problema es que no iterarás sobre los nuevos itens.

+0

poco más trabajo, pero puede mantener una variable que va de verdadero a falso, cuando no hay cambios, es decir, while (Changes) => haz una copia, configura los cambios en falso, haz el proceso, si algo se agrega o cambia, lo cambias a verdadero, de lo contrario el proceso finalizará, – Jonathan

+0

Esta es probablemente la forma más limpia y segura de manejar el miembro de un arraylist mientras se itera. Utilicé esta técnica y observé la consistencia – Steer360

0

Puede que lo ayude.

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