我有一个ArrayList,例如 b ,我想从该ArrayList获取Worker(Worker extend Person)的ArrayList。 b 还包含从Person扩展的其他对象。
我怎么能做到这一点? 感谢。
答案 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)
按照b
和Krtek
的建议迭代ArrayList h3r3
时,请考虑使用Worker.class.isAssignableFrom(p.class)
。请查看What is the difference between instanceof and Class.isAssignableFrom(...)?有关差异的说明。