Scala:我有一个Set [X]和函数(X)=>未来[Y]并希望输出未来[Map [X,Y]]

时间:2014-01-26 15:26:20

标签: scala future scala-collections scala-2.10

我有:

  • 输入集:Set[X]
  • 功能:(X) => Future[Y]

在集合上运行函数,我想输出:

  • Future[Map[X, Y]]

我有一个缓慢的Scala大脑日。请帮我想出上面的转变。感谢。

1 个答案:

答案 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)

你已经完成了。