我对Scala不可变Map的理解是不允许重复键。但是,如果在List上的flatMap然后生成了Map中的重复键:
val l = List(1,2) //> l : List[Int] = List(1, 2)
l.flatMap(m => Map("a" -> m)) //> res0: List[(String, Int)] = List((a,1), (a,2))
但是,如果使用+
运算符创建地图并填充,则不会发生这种情况:
val m = Map("a" -> 1) //> m : scala.collection.immutable.Map[String,Int] = Map(a -> 1)
val update = m +("a" -> 1) //> update : scala.collection.immutable.Map[String,Int] = Map(a -> 1)
为什么flatMap允许创建重复键?
答案 0 :(得分:2)
List.flatMap
接受一个返回GenTraversableOnce
的函数。 Map
是GenTraversableOnce
个元组。
您可以将初始代码视为与此等效:
List(1, 2).flatMap(m => List("a" -> m))
你从来没有真正使用Map
这里,只是“类似列表”的东西,所以没有关键单一的概念 - 甚至没有关键的概念。