如何在arraylist中迭代一种类型的对象?

时间:2014-04-20 17:12:46

标签: java

我有一些继承树,它的所有子类都保存在数组列表中。因此,如果类a, b, c继承自Foo类,我会这样:

private List<Foo> arr = new ArrayList<Foo>();

arr.add(new a());
arr.add(new a());
arr.add(new b());
arr.add(new c());

我只想通过此数组列表中的类对象进行迭代。我可以这样做:

for(int i = 0; i < arr.size(); i++) {
   if(arr[i] instanceof a) {
      // ...
   }
}

嗯,这应该可行,但是我必须在几个地方编写这个代码......并且在for循环中会有其他几个,所以代码会失去很多可读性。

我很想知道,有更短的方法吗?也许只是for for循环?

2 个答案:

答案 0 :(得分:1)

不,你是对的。这样:

for(int i = 0; i < arr.size(); i++) {
    if(arr[i] instanceof a) {
        // ...
    }
}

这是最好的方法。

答案 1 :(得分:0)

您可以编写一个自己的列表,从ArrayList扩展并覆盖从Iterable继承的方法,并且只显示下一个元素,如果它是a的实例。 然后你的循环看起来像这样:

for(a obj : arr) {
    ...
}