【问题标题】:Java 8 Stream API : Filter on instance, and cast [duplicate]Java 8 Stream API:过滤实例,并转换[重复]
【发布时间】:2016-04-25 01:29:06
【问题描述】:

我有一个对象列表:

List<SomeType> myList;

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

List<SomeChildType> myChildList = myList.stream().filter(e -> e instanceof SomeChildType).collect(??????)

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

【问题讨论】:

标签: java java-8


【解决方案1】:

你需要投射物体:

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

【讨论】:

  • 我推荐一致的风格。 .filter(e -&gt; e instanceof SomeChildType).map(e -&gt; (SomeChildType)e).filter(SomeChildType.class::isInstance).map(SomeChildType.class::cast)
  • @Holger 我没想到Class::isInstance - 谢谢。
  • .map(SomeChildType.class::cast) 对我不起作用。像.filter() 这样的任何进一步的流函数都希望我再次转换该项目,如果不是,编译器会告诉我找不到符号
  • @xetra11 它编译得很好:ideone.com/SBk97H - 你是否包含了toList 的静态导入?
  • 这太酷了!
猜你喜欢
  • 2021-10-13
  • 1970-01-01
  • 2019-08-11
  • 2019-06-14
  • 1970-01-01
  • 2020-12-04
  • 2015-05-14
  • 2019-01-14
  • 1970-01-01
相关资源
最近更新 更多