我有一个B和C类型的元素集合,它们都扩展了A.我需要过滤集合以获得只有B类型的元素.
有没有办法做到这一点,除了:
for (A a : initCollection) {
if (a instanceof B) {
newCollection.add(a)?
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢
Kev*_*ion 11
番石榴在其他答案中被提及,但不是特定的解决方案,这比人们意识到的更简单:
Iterable<B> onlyBs = Iterables.filter(initCollection, B.class);
Run Code Online (Sandbox Code Playgroud)
它简单而干净,做正确的事情,只创建一个实例并且不复制任何内容,并且不会引起任何警告.
(但是,该Collections2.filter()方法没有这种特殊的重载,所以如果你真的需要一个Collection,你必须提供Predicates.instanceOf(B.class),结果集合仍然可能是类型Collection<A>.)
| 归档时间: |
|
| 查看次数: |
3531 次 |
| 最近记录: |