以下是代码片段:
List<ParentClass> ls = new ArrayList<ParentClass>();
ls.add(new ChildClass1());
ls.add(new ChildClass2());
ls.add(new ChildClass1());
ls.add(new ChildClass2());
ls.add(new ChildClass2());
ls.add(new ChildClass1());
ls.add(new ChildClass2());
List<ChildClass1> sub1 = new ArrayList<ChildClass1>();
List<ChildClass2> sub2 = new ArrayList<ChildClass2>();
for (ParentClass p : ls) {
if(p instanceof ChildClass1){
sub1.add((ChildClass1)p);
} else {
sub2.add((ChildClass2)p);
}
}
System.out.println(sub1);
System.out.println(sub2);
有没有一种优雅的方法来获取sub1和sub2?我尝试过使用Guava Collections2.filter(),但它返回了Collection《ParentClass》,而我需要的是Collection《ChildClass1》。有什么想法吗?
Collection<ParentClass> sub1= Collections2.filter(ls, Predicates.instanceOf(ChildClass1.class))
Iterable
而不是Collection
,则可以直接使用Iterables.filter(ls, ChildClass1.class)
。 - Louis Wasserman