如何使用foreach将Java地图复制到scala地图

时间:2017-08-19 08:19:12

标签: scala

我是这样写的:

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的正确方法是什么?

1 个答案:

答案 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中,函数使用的是=>,而不是->。)