天天看點

Scala容器與Java容器的互相轉換

從scala 2.12版本開始,Scala官方廢除了“scala.collection.JavaConversions”,改用“scala.collection.JavaConverters”。如果繼續強行使用,則會提示如下錯誤:

java.lang.NoSuchMethodError:
scala.collection.JavaConversions$.deprecated$u002
0propertiesAsScalaMap(Ljava/util/Properties;)
Lscala/collection/mutable/Map;
           

相比于“JavaConversions”的“as*”方法,“JavaConverters”的名稱更加直接——“asScala”,示例如下:

def iterMap(params: Map[String, String]): Unit = {
  params.foreach(kv => print(kv._1))
}
//  聲明java.utils.Properties變量
val props = new Properties()
props.put("name", "yiifaa")
//  引入JavaConverters
import scala.collection.JavaConverters._
//  将Java類型轉換為Scala類型
iterMap(props.asScala.toMap)
           

上面的代碼“props.asScala.toMap”的了解步驟如下:

  1. asScala将Properties轉換為Scala的可變Map(mutable.Map),這與函數聲明要求的不變Map不一緻;
  2. toMap将可變Map轉換為不變Map;