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

pix*_*xel 4 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());
Run Code Online (Sandbox Code Playgroud)

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

Era*_*ran 9

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

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

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

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