【问题标题】:Java 8 - Unable to flatMap on stream [duplicate]Java 8 - 无法在流上进行平面映射 [重复]
【发布时间】:2016-10-31 05:30:00
【问题描述】:

有一个返回Set<> 的函数我想将该函数应用于另一个集合,创建一个扁平化Set<> 下面是代码sn-p,其中仅重命名了变量的映射

 repository.findAll().stream().map(
                p -> forecastService.forecast(p, timeLineInYear, label)
        ).collect(Collectors.toSet());

ForecastService 返回Set<Forecast> 所以上面的语句返回Set<Set<Forecast>>

当我尝试用flatMap 转换相同的语句时

 repository.findAll().stream().flatMap(
                p -> forecastService.forecast(p, timeLineInYear, label)
        ).collect(Collectors.toSet());

我得到一个编译错误

不存在类型变量 R 的实例,因此 Set<Forecast> 符合 Stream<? extends R>

感谢任何帮助。

【问题讨论】:

  • flatMap 调用需要的是 Stream,而不是 Set。试试p -> forecastService.forecast(p, timeLineInYear, label).stream()

标签: java-8 java-stream


【解决方案1】:

你搞错了。 flatMap 方法转换您的流 -> 流。如果您想累积 Set 中的所有元素,请考虑使用 stream.reduce()

【讨论】:

  • 这不是与 scala 集合可以做的完全相反,其中 flatmap 将您的集合展平,而 reduce 会将您的集合减少为单个元素。我可以看到您对 reduce 的建议可能仍然有效,但我想它仍然是一种解决方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多