我想将没有泛型的List
转换为List<MyConcreteType>
。
我还需要过滤掉我的具体类型。
我当前的流逻辑如下:
List list = new ArrayList();
Object collect1 = list.stream().filter((o -> o instanceof MyConcreteType)).collect(Collectors.toList());
但结果我得到了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());
或(类似于鲍里斯在评论中建议的):
List<?> list = new ArrayList();
List<MyConcreteType> collect1 =
list.stream()
.filter(MyConcreteType.class::isInstance)
.map(MyConcreteType.class::cast)
.collect(Collectors.toList());