Scala:向列表中的可变Map添加键值对报错,求正确语法
解决Scala中List里的Map添加键值对的问题
首先得指出你代码里的几个问题和错误根源:
- 类型定义里的
StringType是笔误,应该是Scala的String类型; - Scala标准库默认的
Map是不可变集合,没有原地修改的+=方法,而且你用的List本身也是不可变的,没法直接修改它内部的元素。你看到的类型不匹配错误,是因为编译器误解了+=的用法,才会报expected String, actual: (String, String)。
下面给你两种常用的解决方案,根据你的需求选择:
方案一:使用可变Map(适合需要原地修改的场景)
如果你确实需要原地修改Map内容,要使用scala.collection.mutable.Map,确保List里存放的是可变Map实例:
// 先导入可变Map import scala.collection.mutable.Map // 定义存放可变Map的List val aListMap = List(Map[String, Any]()) // 向第一个Map添加键值对,两种写法都可行 aListMap(0) += ("aKey" -> "anElem") // 或者 aListMap(0) += ("aKey", "anElem")
注意:这里的List依然是不可变的,你不能给List添加/删除元素,但里面的Map是可变的,可以自由修改它的键值对。
方案二:使用不可变集合(符合Scala函数式编程风格)
如果想遵循Scala的函数式理念,尽量使用不可变集合,你需要创建一个新的List,其中第一个元素是更新后的新Map:
// 定义不可变的List和Map val aListMap = List(Map[String, Any]()) // 创建包含更新后Map的新List val newListMap = aListMap.updated(0, aListMap(0) + ("aKey" -> "anElem"))
这里的+方法是不可变Map的方法,它会返回一个包含新键值对的新Map,再通过List.updated方法生成新的List,原有的aListMap不会被修改。
内容的提问来源于stack exchange,提问作者covfefe
相关产品推荐
相关产品推荐

