我有一个Map,其中键是字符串,值是表示为字符串的Int。
scala> val m = Map( "a" -> "1", "b" -> "2", "c" -> "3" )
m: scala.collection.immutable.Map[String,String] = Map(a -> 1, b -> 2, c -> 3)
现在我想将这个转换为一个
Map[String, Int]
。我有一个Map,其中键是字符串,值是表示为字符串的Int。
scala> val m = Map( "a" -> "1", "b" -> "2", "c" -> "3" )
m: scala.collection.immutable.Map[String,String] = Map(a -> 1, b -> 2, c -> 3)
Map[String, Int]
。scala> m.mapValues(_.toInt)
res0: scala.collection.immutable.Map[String,Int] = Map(a -> 1, b -> 2, c -> 3)
正如Brian的回答所示,mapValues
是实现此目的的最佳方法。
您也可以使用模式匹配来实现相同的效果,代码如下:
m.map{ case (k, v) => (k, v.toInt)}
这种方法在其他情况下也很有用(例如,如果您想同时更改键)。
请记住,您正在对Map
中的每个条目进行模式匹配,表示为tuple2,而不是整个Map
。
您还必须使用花括号{}
将case
语句括起来,以使编译器满意。
error: illegal start of simple expression
。另请参阅https://dev59.com/Y2855IYBdhLWcg3wXTAI#4387118。 - DNA
mapValues
是惰性的 - 转换函数每次引用映射值时都会被应用。 - ghik