我怎样才能改变一个
Map[Int, Future[Seq[T]]]
Run Code Online (Sandbox Code Playgroud)
至
Future[Map[Int, Seq[T]]]
Run Code Online (Sandbox Code Playgroud)
在Scala没有等待未来.
例:
Map(
1 -> Future.successful(Seq(100, 200, 300)),
2 -> Future.successful(Seq(500, 600, 700))
)
Run Code Online (Sandbox Code Playgroud)
这应该这样做:
val m = Map(
1 -> Future.successful(Seq(100, 200, 300)),
2 -> Future.successful(Seq(500, 600, 700))
)
Future.sequence { m.map { case (i, f) => f.map((i, _))} }.map(_.toMap)
Run Code Online (Sandbox Code Playgroud)
从内到外,我将键值映射(Int, Future[T])
到Future[(Int, T)]
,然后能够使用s Future.sequence
的结果序列Future
.然后折叠Future
可以映射回一个Map
.
Future.traverse
根据@ IonutG.Stan的建议,可以稍微缩短一下:
Future.traverse(m){ case (i, f) => f.map((i, _))}.map(_.toMap)
Run Code Online (Sandbox Code Playgroud)
这将在Future
from中构建一个新集合m
,使用前面提供的相同函数将元组与未来映射到未来元组.
归档时间: |
|
查看次数: |
561 次 |
最近记录: |