将List [Map [String,Map [String,Int]]]转换为Scala中的Map [Int,Int]

时间:2016-10-09 12:07:13

标签: scala

鉴于以下内容:

val t: List[Map[String, Map[String, Int]]] = List(
  Map("a" -> Map("m" -> 1, "l" -> 21)),
    Map("a" -> Map("m" -> 2, "l" -> 22)),
    Map("a" -> Map("m" -> 3, "l" -> 23)),
    Map("a" -> Map("m" -> 4, "l" -> 24))
)

我想要结果:

Map(1->21,2->22,3->23,4->24)

到目前为止我所拥有的是:

val tt = (for {
  (k,v) <- t
  newKey = v("m")
  newVal = v("l")
} yield Map(newKey -> newVal)).flatten.toMap

但这不是类型检查所以我缺少一些基本的理解,因为我不明白为什么不呢?

我的问题是:

  1. 为什么我的代码有问题?
  2. 进行我想要的转换最惯用的方式是什么?

2 个答案:

答案 0 :(得分:2)

您已获得List[Map[...]],而不是Map[...],因此您想首先解压缩。

val tt = (for {
  map <- t
  (k, v) <- map
} ...)

答案 1 :(得分:0)

  t
   .iterator
   .flatMap(_.values)
   .map { v => v("m") -> v("l") }
   .toMap