在流操作期间转换列表

时间:2016-03-18 21:09:21

标签: java java-8 java-stream

这是我的情景:

private List<Entity> getPlanets() {
   return entities.values()
                  .stream()
                  .filter(x -> x instanceof Planet)
                  .collect(Collectors.toList());
}
  • EntityPlanet
  • 的超类
  • 实体是HashMap<Entity>
  • 该方法被称为&#34; getPlanets&#34;我希望它返回List<Planet>,但在我看来,流表达式将返回List<Entity>
  • 我尝试了一些演员表达,但似乎都没有。

我是Java 8流的新手,所以也许有人可以指出我缺少的东西?

2 个答案:

答案 0 :(得分:8)

return entities.values()
               .stream()
               .filter(x -> x instanceof Planet)
               .map(x -> (Planet) x)
               .collect(Collectors.toList());

答案 1 :(得分:3)

方法参考的变体:

return entities.values().stream()
    .filter(Planet.class::isInstance)
    .map(Planet.class::cast)
    .collect(Collectors.toList());