使用示例:
假设我有课堂电话Gun
。
我有另一个班级电话Bullet
。
类Gun
的ArrayList为Bullet
。
迭代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));
现在我的问题是:如何使用ArrayList迭代打印输出枪对象列表,而不是使用传统的for循环?
答案 0 :(得分:41)
您希望遵循与以前相同的模式:
for (Type curInstance: CollectionOf<Type>) {
// use currInstance
}
在这种情况下,它将是:
for (Bullet bullet : gunList.get(2).getBullet()) {
System.out.println(bullet);
}
答案 1 :(得分:7)
编辑:
嗯,他编辑了他的帖子。
如果一个Object继承了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
}
}
首先得到你的第三个枪对象:
Gun g = gunList.get(2);
然后迭过第三枪的子弹:
ArrayList<Bullet> bullets = g.getBullets();
for(Bullet b : bullets) {
//necessary code here
}
答案 2 :(得分:6)
使用Java8时,它会更容易,只有一个单行。
gunList.get(2).getBullets().forEach(n -> System.out.println(n));
答案 3 :(得分:3)
for (Bullet bullet : gunList.get(2).getBullet()) System.out.println(bullet);
答案 4 :(得分:1)
我们可以做一个嵌套循环来访问列表中元素的所有元素:
for (Gun g: gunList) {
System.out.print(g.toString() + "\n ");
for(Bullet b : g.getBullet() {
System.out.print(g);
}
System.out.println();
}
答案 5 :(得分:1)
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
}