List上的flatMap允许创建具有重复元素的Map

时间:2016-06-20 14:19:26

标签: scala

我对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允许创建重复键?

1 个答案:

答案 0 :(得分:2)

List.flatMap接受一个返回GenTraversableOnce的函数。 MapGenTraversableOnce个元组。

您可以将初始代码视为与此等效:

List(1, 2).flatMap(m => List("a" -> m))

你从来没有真正使用Map这里,只是“类似列表”的东西,所以没有关键单一的概念 - 甚至没有关键的概念。