从java </t>中特定类型的ArrayList <t>获取对象

时间:2011-03-07 14:23:15

标签: java types arraylist

我有一个ArrayList,例如 b ,我想从该ArrayList获取Worker(Worker extend Person)的ArrayList。 b 还包含从Person扩展的其他对象。

我怎么能做到这一点? 感谢。

5 个答案:

答案 0 :(得分:4)

如果你使用Guava,它就像:

一样简单
ArrayList<Person> b;
ArrayList<Worker> a = Lists.newArrayList(Iterables.filter(b, Worker.class));

答案 1 :(得分:3)

声明你的ArrayList是这样的:

ArrayList<Worker> myArray = new ArrayList<Worker>()

现在,您的ArrayList只能包含Worker,其不同方法的返回类型为Worker

然后:

for(Person p : b) {
    if(p instanceof Worker)
        myArray.add((Worker)p);
}

答案 2 :(得分:0)

以下是一个例子:

List<Person> b = ...

List<Worker> workers = new ArrayList<Worker>();
for (Person p : b) {
  if (p instanceof Worker) { workers.add((Worker) p); }
}

答案 3 :(得分:0)

嗯,我实现了我的目标:

public ArrayList<Person> getList(Class<? extends Person> type) {
    ArrayList<Person> newList = new ArrayList<Person>();

    for (Person p : person)
        if (type.isInstance(p))
            newList.add(p);

    return newList;
}

我用dinamyc儿童类来解决我的问题。 我希望对别人有用。

答案 4 :(得分:-1)

按照bKrtek的建议迭代ArrayList h3r3时,请考虑使用Worker.class.isAssignableFrom(p.class)。请查看What is the difference between instanceof and Class.isAssignableFrom(...)?有关差异的说明。