在Scala中将Map[String, String]转换为Map[String, Int]

3

我有一个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]
2个回答

12
scala> m.mapValues(_.toInt)
res0: scala.collection.immutable.Map[String,Int] = Map(a -> 1, b -> 2, c -> 3)

1
注意:与 Scala 中的大多数集合转换不同,mapValues 是惰性的 - 转换函数每次引用映射值时都会被应用。 - ghik

6

正如Brian的回答所示,mapValues是实现此目的的最佳方法。

您也可以使用模式匹配来实现相同的效果,代码如下:

m.map{ case (k, v) => (k, v.toInt)}

这种方法在其他情况下也很有用(例如,如果您想同时更改键)。

请记住,您正在对Map中的每个条目进行模式匹配,表示为tuple2,而不是整个Map

您还必须使用花括号{}case语句括起来,以使编译器满意。


花括号不是必须的,但从风格上讲更好。 - euphoria83
在这种特定情况下(无意冒犯),它们是必需的。用圆括号替换它们会产生错误:error: illegal start of simple expression。另请参阅https://dev59.com/Y2855IYBdhLWcg3wXTAI#4387118。 - DNA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接