java - for - ¿Cómo iterar a través de ArrayList of Objects of ArrayList of Objects?
java arraylist next (6)
Usando un ejemplo:
Digamos que tengo una llamada de clase Gun
. Tengo otra clase llamada Bullet
.
Class Gun
tiene un ArrayList of Bullet
.
Para iterar a través del Arraylist of Gun
lugar de hacer esto:
ArrayList<Gun> gunList = new ArrayList<Gun>();
for (int x=0; x<gunList.size(); x++)
System.out.println(gunList.get(x));
Simplemente podemos iterar a través del ArrayList of Gun
como tal:
for (Gun g: gunList) System.out.println(g);
Ahora, quiero iterar e imprimir todas las Bullet
de mi tercer objeto Gun
:
for (int x=0; x<gunList.get(2).getBullet().size(); x++) //getBullet is just an accessor method to return the arrayList of Bullet
System.out.println(gunList.get(2).getBullet().get(x));
Ahora mi pregunta es: en lugar de usar el for-loop convencional, ¿cómo puedo imprimir la lista de objetos de pistola utilizando la iteración de ArrayList?
Al usar Java8 sería más fácil y solo un trazador de líneas único.
gunList.get(2).getBullets().forEach(n -> System.out.println(n));
Desea seguir el mismo patrón que antes:
for (Type curInstance: CollectionOf<Type>) {
// use currInstance
}
En este caso sería:
for (Bullet bullet : gunList.get(2).getBullet()) {
System.out.println(bullet);
}
Editar:
Bueno, editó su publicación.
Si un objeto hereda Iterable, tiene la posibilidad de utilizar el ciclo for-each como tal:
for(Object object : objectListVar) {
//code here
}
Entonces, en su caso, si desea actualizar sus armas y sus balas:
for(Gun g : guns) {
//invoke any methods of each gun
ArrayList<Bullet> bullets = g.getBullets()
for(Bullet b : bullets) {
System.out.println("X: " + b.getX() + ", Y: " + b.getY());
//update, check for collisions, etc
}
}
Primero obtén tu tercer objeto Gun:
Gun g = gunList.get(2);
Luego itera sobre las balas del tercer arma:
ArrayList<Bullet> bullets = g.getBullets();
for(Bullet b : bullets) {
//necessary code here
}
Podemos hacer un ciclo anidado para visitar todos los elementos de los elementos en su lista:
for (Gun g: gunList) {
System.out.print(g.toString() + "/n ");
for(Bullet b : g.getBullet() {
System.out.print(g);
}
System.out.println();
}
for (Bullet bullet : gunList.get(2).getBullet()) System.out.println(bullet);
int i = 0; // Counter used to determine when you''re at the 3rd gun
for (Gun g : gunList) { // For each gun in your list
System.out.println(g); // Print out the gun
if (i == 2) { // If you''re at the third gun
ArrayList<Bullet> bullets = g.getBullet(); // Get the list of bullets in the gun
for (Bullet b : bullets) { // Then print every bullet
System.out.println(b);
}
i++; // Don''t forget to increment your counter so you know you''re at the next gun
}