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.有没有办法将其转换Stream为List<MyConcreteType>?
使用参数化类型而不是原始类型,并用于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)