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

问题描述 投票:3回答:1

我想将没有泛型的List转换为List<MyConcreteType>

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

我当前的流逻辑如下:

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

但结果我得到了Object而不是List。有没有办法将这个Stream转换为List<MyConcreteType>

java generics java-8 java-stream
1个回答
9
投票

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

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

或(类似于鲍里斯在评论中建议的):

 List<?> list = new ArrayList();
 List<MyConcreteType> collect1 = 
     list.stream()
         .filter(MyConcreteType.class::isInstance)
         .map(MyConcreteType.class::cast)
         .collect(Collectors.toList());
© www.soinside.com 2019 - 2024. All rights reserved.