java - 如何使用 Java 中的流将没有泛型的列表转换为带有泛型的列表?

标签 java generics java-8 java-stream

我想转换一个 List没有泛型到 List<MyConcreteType> .

我还需要过滤掉我的具体类型。

我当前的流逻辑是这样的:

List list = new ArrayList();
Object collect1 = list.stream().filter((o -> o instanceof MyConcreteType)).collect(Collectors.toList());

但结果我得到一个 Object而不是 List .有没有办法转换这个 StreamList<MyConcreteType>

最佳答案

使用参数化类型而不是原始类型,并使用map将通过过滤器的对象转换为MyConcreteType:

List<?> list = new ArrayList();
List<MyConcreteType> collect1 = 
    list.stream()
        .filter((o -> o instanceof MyConcreteType))
        .map(s-> (MyConcreteType) s)
        .collect(Collectors.toList());

或(类似于 Boris 在评论中建议的内容):

 List<?> list = new ArrayList();
 List<MyConcreteType> collect1 = 
     list.stream()
         .filter(MyConcreteType.class::isInstance)
         .map(MyConcreteType.class::cast)
         .collect(Collectors.toList());

关于java - 如何使用 Java 中的流将没有泛型的列表转换为带有泛型的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47888145/

相关文章:

java - 使用条件生成器运行带有 IN 子句的查询

java - 如何将不同的变量传递给 JUnit5 中的 beforeEach Hook

java - 按顺序添加最少的元素

java - 如何从多模块 Maven 项目构建可执行 jar?

java - 如何处理 Guava 表中的碰撞?

c# - 删除 List<T> 中的备用元素

generics - 为什么自动泛化有时会推断出过于具体的类型?

java - 无法弄清楚如何实例化从具有 <S, T extends S> 等条件的函数返回的泛型类

java - 如何使用 Java 流求除数之和?

Java 8 findFirst 和遇到顺序