scala-在使用for循环时如何展平嵌套的可选项

scala-在使用for循环时如何展平嵌套的可选项,scala,for-loop,future,for-comprehension,Scala,For Loop,Future,For Comprehension,我正在对一个范围执行for循环,该范围产生一个可选结果的未来。 我希望生成的集合仅包含非可选项 但我剩下的是Future[Seq[Option[Result]]] 代码与此类似: val result = for { x <- 0 to numItems } yield { Future{ ...logic... val intermediateResult: Option[Thing] = Somethi

我正在对一个范围执行
for
循环,该范围产生一个可选结果的未来。 我希望生成的集合仅包含非可选项

但我剩下的是
Future[Seq[Option[Result]]]

代码与此类似:

val result = for {
        x <- 0 to numItems
      } yield {
        Future{
          ...logic...
          val intermediateResult: Option[Thing] = SomethingWhichReturnsOptionOfThing
          val s: Option[String] = intermediateResult map {
            ir => ...Do something with ir when it exists and then and map to String...
          }
          s map {
            string => Result(x, string)
          }
        }
      }
      Future.sequence(result) // Future[Seq[Option[Result]]]
val result=for{
x…在ir存在时对其执行某些操作,然后映射到字符串。。。
}
s地图{
string=>Result(x,string)
}
}
}
Future.sequence(result)//Future[Seq[选项[result]]

但是我想要的是没有
选项的所有结果,即
未来[Seq[Result]]
使未来的内容变得平坦

scala> List(Some(1), None, Some(2))
res1: List[Option[Int]] = List(Some(1), None, Some(2))

res1.flatten
res2: List[Int] = List(1, 2)

扁平化未来的内容

scala> List(Some(1), None, Some(2))
res1: List[Option[Int]] = List(Some(1), None, Some(2))

res1.flatten
res2: List[Int] = List(1, 2)

一旦
未来
完成,您可以
展平
序列

Future.sequence(result).map(_.flatten)
这将删除所有
None
值,并从所有
Some
结果中提取
Result


请注意,您将不再知道哪个
结果
来自哪个项目编号,以及
未来。序列
也可能会丢弃一些错误,因此如果您希望准确地处理/报告错误,这不是最佳解决方案。

一旦
未来
完成,您可以
展平
序列

Future.sequence(result).map(_.flatten)
这将删除所有
None
值,并从所有
Some
结果中提取
Result


请注意,您将不再知道哪个
结果
来自哪个项目编号,以及
未来。序列
也可能会丢弃一些错误,因此,如果您希望准确地处理/报告错误,这不是最佳解决方案。

未来.sequence(Result).map(u.flatte)
有什么问题吗。回答
Future.sequence(result).map(u.flatte)
的错误点看起来是正确的。回答问题