Scala创建可变Map避免弃用并转为不可变Map的方法
解决Scala 2.13+中Map元素添加无弃用警告的方案
方案一:直接构建不可变Map(最符合Scala风格)
Scala优先推荐不可变数据结构,若能提前确定所有元素,直接一次性构建是最优解:
val immutableMap: Map[String, Any] = Map( "foo" -> "baa", "wibble" -> "wobble" )
方案二:动态添加用可变Map
如果必须动态添加元素,要明确使用scala.collection.mutable.Map,避免和默认不可变Map混淆:
- 先导入可变Map:
import scala.collection.mutable.Map
- 创建实例并添加元素:
val mutableMap = Map.empty[String, Any] // 方式1:用+=(可变Map原生支持,无弃用警告) mutableMap += ("foo" -> "baa") mutableMap += ("wibble" -> "wobble") // 方式2:用addOne()(Scala 2.13+标准推荐API) mutableMap.addOne("foo" -> "baa") mutableMap.addOne("wibble" -> "wobble")
- 转为不可变Map:
val immutableMap: Map[String, Any] = mutableMap.toMap
方案三:不可变Map链式操作(无可变状态)
不想用可变Map的话,可借助不可变Map的原生+或++操作(无弃用风险):
// 链式+操作 val immutableMap: Map[String, Any] = Map.empty[String, Any] + ("foo" -> "baa") + ("wibble" -> "wobble") // 批量添加用++ val immutableMap: Map[String, Any] = Map.empty[String, Any] ++ Seq( "foo" -> "baa", "wibble" -> "wobble" )
关键提示
- 默认
Map()是不可变的,对var变量的map += ...是语法糖,底层调用了已弃用的MapOps+方法,这就是警告的根源。 - 可变Map的
+=和addOne()都是原生合法操作,不存在弃用问题。 - 优先选不可变Map的构建方式,契合Scala函数式编程的设计习惯。
内容的提问来源于stack exchange,提问作者teknopaul
相关产品推荐
相关产品推荐

