Java 8 Stream API:过滤实例和强制转换

Thi*_* D. 17 java java-8

我有一个对象列表:

List<SomeType> myList;
Run Code Online (Sandbox Code Playgroud)

我想获得此列表中可用的子类型列表:

List<SomeChildType> myChildList = myList.stream().filter(e -> e instanceof SomeChildType).collect(??????)
Run Code Online (Sandbox Code Playgroud)

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

ass*_*ias 62

你需要强制转换对象:

List<SomeChildType> myChildList = myList.stream()
                                        .filter(SomeChildType.class::isInstance)
                                        .map(SomeChildType.class::cast)
                                        .collect(toList())
Run Code Online (Sandbox Code Playgroud)

  • 我推荐一贯的风格.要么`.filter(e - > e的someChildType).map(e - >(SomeChildType)e)`或`.filter(SomeChildType.class :: isInstance).map(SomeChildType.class :: cast)` (8认同)