Java8流API:实例上的过滤器和强制转换

Java8流API:实例上的过滤器和强制转换,java,java-8,Java,Java 8,我有一个对象列表: List<SomeType> myList; 列出myList; 我想获得此列表中可用的子类型列表: List<SomeChildType> myChildList = myList.stream().filter(e -> e instanceof SomeChildType).collect(??????) List myChildList=myList.stream().filter(e->e SomeChildType的实例)。收集

我有一个对象列表:

List<SomeType> myList;
列出myList;
我想获得此列表中可用的子类型列表:

List<SomeChildType> myChildList = myList.stream().filter(e -> e instanceof SomeChildType).collect(??????)
List myChildList=myList.stream().filter(e->e SomeChildType的实例)。收集(???)

我不知道如何收集以获得正确的列表类型。

您需要强制转换对象:

List<SomeChildType> myChildList = myList.stream()
                                        .filter(SomeChildType.class::isInstance)
                                        .map(SomeChildType.class::cast)
                                        .collect(toList())
List myChildList=myList.stream()
.filter(SomeChildType.class::isInstance)
.map(SomeChildType.class::cast)
.collect(toList())

我建议采用一致的风格。
.filter(e->e SomeChildType的instanceof SomeChildType).map(e->(SomeChildType)e)
.filter(SomeChildType.class::isInstance).map(SomeChildType.class::cast)
@Holger我没有想到过
class::isInstance
-谢谢。
.map(SomeChildType.class::cast)
对我不起作用。任何进一步的流函数,如
.filter()
,都希望我再次强制转换该项,否则编译器会告诉我符号无法转换found@xetra11它编译得很好:-您是否为
toList
包含了静态导入?这太酷了!相关的:相关的: