2016-10-09 97 views
0

考慮以下幾點:轉換列表[地圖[字符串,地圖[字符串,INT]]以圖[INT,INT]在斯卡拉

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

你有List[Map[...]],而不是Map[...]所以你想先解壓。

val tt = (for { 
    map <- t 
    (k, v) <- map 
} ...) 
0
t 
    .iterator 
    .flatMap(_.values) 
    .map { v => v("m") -> v("l") } 
    .toMap 
相關問題