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)
的错误点看起来是正确的。回答问题