Scala:地图的未来清单

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala:地图的未来清单相关的知识,希望对你有一定的参考价值。

我有一个包含未来地图的列表

val m1 = Future(Map(("A" -> 1), ("B" -> 1)))

val m2 = Future(Map(("A" -> 1), ("C" -> 1)))

val m3 = Future(Map(("C" -> 5), ("D" -> 1)))

val list = List(m1, m2, m3)

我想合并所有地图并汇总键的值。我想要的输出如下

Future(Map(A -> 2, B -> 1, C -> 6, D -> 1)

如何执行相同的操作。

答案

您可以使用Future.sequence方法执行从List[Future[Map[_, _]]]Future[List[Map[_, _]]]的转换,然后使用列表上的reduce函数合并映射并将自定义合并函数传递给它。

示例:

val list = List(m1, m2, m3)

def merge(first: Map[String, Int], second: Map[String, Int]): Map[String, Int] = 
  first ++ second.map  case (k, v) => (k, v + first.getOrElse(k, 0)) 


Future.sequence(list).map(_.reduce(merge _)) // will produce Future(Map(A -> 2, B -> 1, C -> 6, D -> 1))
另一答案

我会做这样的事情:

val m1 = Future(Map(("A" -> 1), ("B" -> 1)))
val m2 = Future(Map(("A" -> 1), ("C" -> 1)))
val m3 = Future(Map(("C" -> 5), ("D" -> 1)))

val futures = List(m1, m2, m3) 
val future = Future.sequence(futures) // Converts List of Future to Future of List
val futureMap = Future.sequence(futures).map(_.flatMap(_.toList).toMap)

基本上,它将Seq[Map[String, Int]]转换为第一个Seq[(String, Int)],然后最终将其转换为Map:Map[String, Int]

以上是关于Scala:地图的未来清单的主要内容,如果未能解决你的问题,请参考以下文章

html 实时清单 - 此脚本将检查元标记,站点地图,GA,favicon,共享元标记是否已正确设置。不是花哨的

待做清单

2019读书清单

uniApp问题清单与经验

uniApp问题清单与经验

旅行必备清单