web-dev-qa-db-ja.com

オブジェクトのArrayListのオブジェクトのArrayListを反復処理する方法は?

例を使用して:

クラス呼び出しGunがあるとします。別のクラス呼び出しBulletがあります。

クラスGunには、BulletのArrayListがあります。

これを行う代わりに、GunのArraylistを反復処理するには:

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

GunのArrayListを次のように単純に繰り返すことができます。

for (Gun g: gunList) System.out.println(g); 

ここで、3番目の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));

今私の質問は:従来のforループを使用する代わりに、ArrayList反復を使用して銃オブジェクトのリストを印刷するにはどうすればよいですか?

44
user3437460

前と同じパターンに従う必要があります。

for (Type curInstance: CollectionOf<Type>) {
  // use currInstance
}

この場合、次のようになります。

for (Bullet bullet : gunList.get(2).getBullet()) {
   System.out.println(bullet);
}
43
unholysampler

編集:

まあ、彼は彼の投稿を編集しました。

オブジェクトがIterableを継承する場合、for-eachループを次のように使用することができます。

for(Object object : objectListVar) {
     //code here
}

あなたの場合、銃と弾丸を更新したい場合:

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
     }
}

最初に3番目のGunオブジェクトを取得します。

Gun g = gunList.get(2);

次に、3番目の銃の弾丸を反復処理します。

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

for(Bullet b : bullets) {
     //necessary code here
}

Java8を使用する場合は、より簡単で、ライナーは1つだけです。

    gunList.get(2).getBullets().forEach(n -> System.out.println(n));
6
Ray A
for (Bullet bullet : gunList.get(2).getBullet()) System.out.println(bullet);
3
Tsotne Tabidze

ネストされたループを実行して、リスト内の要素のすべての要素にアクセスできます。

 for (Gun g: gunList) {
   System.out.print(g.toString() + "\n   "); 
   for(Bullet b : g.getBullet() {
      System.out.print(g);    
   }
   System.out.println(); 
 }
1
Thorn
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
}
1
Andrew Orobator