我有:
Set[X]
和(X) => Future[Y]
在集合上运行函数,我想输出:
Future[Map[X, Y]]
我有一个缓慢的Scala大脑日。请帮我想出上面的转变。感谢。
答案 0 :(得分:4)
关键部分是Future.traverse
。作为第一步,您可以写下以下内容:
def toSet[A, B](keys: Set[A], computeValue: A => Future[B]) =
Future.traverse(keys)(computeValue)
但是这会返回一个Future[Set[B]]
,这不是你想要的。因此,您可以添加键并在结尾处转换为地图:
def toMap[A, B](keys: Set[A], computeValue: A => Future[B]): Future[Map[A, B]] =
Future.traverse(keys)(k => computeValue(k).map(k -> _)).map(_.toMap)
你已经完成了。