我该如何执行以下操作(这无法编译):
<T> List<T> getElementsOf() {
return list.stream()
.filter(x -> x instanceof T)
.map(x -> (T) x)
.collect(toList());
}
使用示例是什么?理想情况下,它应该像 obj.<Derived>getElementsOf()
.
最佳答案
虽然另一个答案几乎可以完成这项工作,但这里有一个更好的答案:
<T> List<T> getElementsOf(Class<T> clazz) {
return list.stream()
.filter(clazz::isInstance)
.map(clazz::cast)
.collect(toList());
}
请注意 clazz::isInstance
东西。它不比较两个类,而是使用 isInstance
方法。根据文档,这相当于 instanceof
,这正是您首先想要的。
This method is the dynamic equivalent of the Java language instanceof operator.
关于Java 过滤列表到泛型类型 T,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40989500/