【发布时间】:2015-09-02 07:14:22
【问题描述】:
下面的代码sn-p:
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?我确实尝试过返回 Collection《ParentClass》的 Guava Collections2.filter(),而我需要 Collection《ChildClass1》,知道吗?
Collection<ParentClass> sub1= Collections2.filter(ls, Predicates.instanceOf(ChildClass1.class))
【问题讨论】:
-
如果您可以使用
Iterable而不是Collection,您可以使用Iterables.filter(ls, ChildClass1.class)。