Java 过滤列表到泛型类型 T

标签 java

我该如何执行以下操作(这无法编译):

<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/

相关文章:

java - 从 RESTeasy 接口(interface)返回 HTTP 错误

java - 尝试围绕一个点旋转,但无论如何都会失去精度

java - 使用部分匹配触发字数统计

java - 如何将图像添加到 Watson Conversation 响应中?

java - 如何让 Java 在 while 循环中实现呈指数级增长的数字,而不会耗尽内存?

java - 如何在内存不足异常的情况下解压 Android 应用程序中的 RAR 文件?

java - 如果是包装类,应该如何处理异常?

java - HTTP 状态 404 Eclipse Tomcat 7

java - 从字符串中减去字符串

java - 如何使用 Mockito 在单元测试中模拟 ObservableTransformer