我想转换一个 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());
或(类似于 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/