Java过滤器列表到泛型类型T.

dem*_*emi 7 java

我该怎么做(不编译):

<T> List<T> getElementsOf() {
    return list.stream()
            .filter(x -> x instanceof T)
            .map(x -> (T) x)
            .collect(toList());
}
Run Code Online (Sandbox Code Playgroud)

什么是用法的例子?理想情况下,应该是这样的obj.<Derived>getElementsOf().

Swe*_*per 13

虽然另一个答案几乎完成了这项工作,但这里有一个更好的答案:

<T> List<T> getElementsOf(Class<T> clazz) {
    return list.stream()
            .filter(clazz::isInstance)
            .map(clazz::cast)
            .collect(toList());
}
Run Code Online (Sandbox Code Playgroud)

请注意,clazz::isInstance东西.它不是比较两个类,而是使用该isInstance方法.根据文档,这相当于instanceof,这是你想要的第一个.

此方法是Java语言instanceof运算符的动态等效项.