scala - 我将如何在 Scala 中生成一个 immutable.Map?

标签 scala map for-loop immutability yield

我试过这个,但它不起作用:

val map:Map[String,String] = for {
    tuple2 <- someList
  } yield tuple2._1 -> tuple2._2

我还能如何将 Tuple2 列表转换为 Map?

最佳答案

我的第一次尝试是这样的:

scala> val country2capitalList = List("England" -> "London", "Germany" -> "Berlin")
country2capitalList: List[(java.lang.String, java.lang.String)] = List((England,London), (Germany,Berlin))

scala> val country2capitalMap = country2capital.groupBy(e => e._1).map(e => (e._1, e._2(0)._2))
country2capitalMap: scala.collection.Map[java.lang.String,java.lang.String] = Map(England -> London, Germany -> Berlin)

但这是最好的解决方案:
scala> val betterConversion = Map(country2capitalList:_*)
betterConversion: scala.collection.immutable.Map[java.lang.String,java.lang.String] = Map(England -> London, Germany -> Berlin)
:_*需要给编译器一个使用列表作为可变参数参数的提示。否则它会给你:
scala> Map(country2capitalList)
<console>:6: error: type mismatch;
 found   : List[(java.lang.String, java.lang.String)]
 required: (?, ?)
       Map(country2capitalList)
           ^

从 Scala 2.8 开始,您可以使用 toMap :
scala> val someList = List((1, "one"), (2, "two"))   
someList: List[(Int, java.lang.String)] = List((1,one), (2,two))

scala> someList.toMap
res0: scala.collection.immutable.Map[Int,java.lang.String] = Map((1,one), (2,two))

关于scala - 我将如何在 Scala 中生成一个 immutable.Map?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2763584/

相关文章:

Scala 类成员和构造函数参数名称冲突

c++ - 确定 map 是否包含键的值?

用于单个对象的 Ruby map()

c - FOR 循环中的字符串

javascript - 制作一个函数,从可被 3 整除的数组中提取所有数字

c# - 如何使用按钮停止 for 循环?

forms - 如何使用 Play 正确验证表单!在斯卡拉?

scala - Shapeless:将具有某些选项的元组映射到options

java - Spring security oauth2 客户端 - 重定向太多

全国 iOS 离线 map (OSM)