如何遍历对象的ArrayList对象的ArrayList?

use*_*460 44 java iteration arraylist object

举个例子:

假设我有班级电话Gun.我有另一个班级电话Bullet.

Class Gun有一个ArrayList Bullet.

迭代通过Arraylist ...而Gun不是这样做:

ArrayList<Gun> gunList = new ArrayList<Gun>();
for (int x=0; x<gunList.size(); x++)
    System.out.println(gunList.get(x));
Run Code Online (Sandbox Code Playgroud)

我们可以简单地遍历ArrayList Gun:

for (Gun g: gunList) System.out.println(g); 
Run Code Online (Sandbox Code Playgroud)

现在,我想迭代并打印出Bullet我的第三个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));
Run Code Online (Sandbox Code Playgroud)

现在我的问题是:如何使用ArrayList迭代打印输出枪对象列表,而不是使用传统的for-loop?

unh*_*ler 43

您想要遵循与以前相同的模式:

for (Type curInstance: CollectionOf<Type>) {
  // use currInstance
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,它将是:

for (Bullet bullet : gunList.get(2).getBullet()) {
   System.out.println(bullet);
}
Run Code Online (Sandbox Code Playgroud)


0-4*_*23o 9

编辑:

好吧,他编辑了他的帖子.

如果Object继承了Iterable,则可以使用for-each循环:

for(Object object : objectListVar) {
     //code here
}
Run Code Online (Sandbox Code Playgroud)

所以在你的情况下,如果你想更新你的枪支和他们的子弹:

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
     }
}
Run Code Online (Sandbox Code Playgroud)

首先得到你的第三个枪对象:

Gun g = gunList.get(2);
Run Code Online (Sandbox Code Playgroud)

然后迭过第三枪的子弹:

ArrayList<Bullet> bullets = g.getBullets();

for(Bullet b : bullets) {
     //necessary code here
}
Run Code Online (Sandbox Code Playgroud)


小智 6

使用Java8时,它将更容易,只有一个单行.

    gunList.get(2).getBullets().forEach(n -> System.out.println(n));
Run Code Online (Sandbox Code Playgroud)

  • 甚至`gunList.get(2).getBullets().forEach(System.out::println);`。 (2认同)