将Java映射转换为Scala映射的功能

时间:2019-09-02 17:56:24

标签: java scala type-conversion maps scala-java-interop

对于scala来说这是全新的,因此可以提供任何帮助。我试图通过JVM将对象从python传递到scala,所以我需要一个函数,该函数将java映射作为输入并返回一个scala映射作为输出。

我还不确定我是否希望地图可变或不可变,但是我一直在尝试使用.asScala.toMap使其不可变,但这引发了错误。我认为问题出在我函数的语法上?


private object PythonUtils {

  def toScalaMap[K, V](jm: java.util.Map[K, V]): Map[K, V] = {
    jm.asScala
  }

}

到目前为止,该函数对参数进行类型检查,然后获取Java映射并将其转换为scala。但是,当我对此进行编译时,出现type mismatch错误found: scala.collection.mutable.Map[K,V] required java.util.Map[K,V],我们将不胜感激!

1 个答案:

答案 0 :(得分:1)

尝试

import scala.collection.JavaConverters._
import scala.collection.mutable

def toScalaMutableMap[K, V](jm: java.util.Map[K, V]): mutable.Map[K, V] = {
  jm.asScala
}

def toScalaImmutableMap[K, V](jm: java.util.Map[K, V]): Map[K, V] = {
  jm.asScala.toMap
}

libraryDependencies += "org.scala-lang.modules" %% "scala-java8-compat" % "0.9.0"

Convert Java Map to Scala Map

Converting mutable to immutable map

  

但是,当我对此进行编译时,出现类型不匹配错误found: scala.collection.mutable.Map[K,V] required java.util.Map[K,V]

看看哪一行会产生此错误。

也许您有import java.util.Map。然后Map指向java.util.Map。如果您删除此导入,则Map指的是scala.Predef.Map,也就是scala.immutable.Map