import java.util.{HashMap => JavaHashMap}
import collection.mutable.{HashMap => ScalaHashMap}
def toScalaMap[K, V](jMap: JavaHashMap[K, V]) = {
val sMap = ScalaHashMap[K,V]();
jMap.forEach(_ -> sMap.put(_._1, _._2))
sMap
}
但斯卡拉告诉我:
错误:扩展函数缺少参数类型((x $ 1:)=> x $ 1. $ minus $ greater(sMap.put(((x $ 2)=> x $ 2._1),(($ 3 $ )=> x $ 3. 2)))) jMap.forEach( - > sMap.put(_._ 1,_._ 2))
所以我将类型添加到_:
jMap.forEach((_: (K, V)) -> sMap.put(_._1, _._2))
但斯卡拉告诉我:
错误:缺少扩展函数的参数类型((x $ 2:)=> x $ 2. 1) jMap.forEach(( :( K,V)) - > sMap.put(_._ 1,_._ 2))
错误:缺少扩展函数的参数类型((x $ 3 :) => x $ 3. 2) jMap.forEach(( :( K,V)) - > sMap.put(_._ 1,_._ 2))
那么在Scala中使用Java Map的正确方法是什么?
答案 0 :(得分:0)
您只需使用JavaConverters:
即可 import scala.collection.JavaConverters
def toScalaMap[K, V](jMap: JavaHashMap[K, V]) = jMap.asScala
对于Scala 2.11.x或之前因为它们不支持SAM使用,所以forEach
的参数不适用于Scala函数。
对于Scala 2.12,它应该是一个两个参数列表,而不是一个带有元组的列表:
jMap.forEach((k: K, v: V) => sMap.put(k, v))
(另请注意:在Scala中,函数使用的是=>
,而不是->
。)