我正在对产生将来可选结果的范围执行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]]]
但是我想要的是没有Option
即Future[Seq[Result]]
答案 0 :(得分:2)
flatten
完成后,您可以Seq
Future
:
Future.sequence(result).map(_.flatten)
这将删除所有None
值,并从所有Result
结果中提取Some
值。
请注意,您将不再知道哪个Result
来自哪个项目编号,并且Future.sequence
也可能会丢弃一些错误,因此如果您想要准确的错误处理/报告,这不是最佳的解决方案
答案 1 :(得分:1)
整理未来的内容。
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)