【问题标题】:How to build an Scala immutable map from a mutable Java map?如何从可变 Java 映射构建 Scala 不可变映射?
【发布时间】:2013-04-23 14:38:45
【问题描述】:

下面的类导致编译器错误:

value toMap is not a member of 
 java.util.Map[java.lang.String,java.util.List[com.recommendations.TestObject]]


class ProcessData(var distanceMap : java.util.Map[java.lang.String , java.util.List[TestObject]]) {

    def apply = {

      val m2: Map[String, Any] = distanceMap.toMap

    }

}

此行导致错误:

val m2: Map[String, Any] = distanceMap.toMap

错误是因为 Map distanceMap 的值是可变的 java.util.List ,因此这些值也需要是不可变的吗?

如何从上面的可变 distanceMap 构建 Scala 不可变映射?

【问题讨论】:

标签: java scala scala-java-interop


【解决方案1】:
import scala.collection.JavaConversions._

val m = new java.util.HashMap[String, Object]()
m.put("Foo", java.lang.Boolean.TRUE)
m.put("Bar", java.lang.Integer.valueOf(1))

val m2: Map[String, Any] = m.toMap
println(m2);

【讨论】:

  • 您的代码无法编译,java.util.Map 是一个接口,而不是具体的类,因此无法实例化。 .toMap 方法不是 java.util.Map 的成员
  • 我收到上述代码的编译器错误:“此行有多个标记 - 值 toMap 不是 java.util.HashMap[String,java.lang.Object] 的成员 - 无法证明that Char <: u> augmentString(m) - 方法 toMap 的参数不足:(implicit ev: <: u collection.immutable.map ev>
【解决方案2】:

您只是缺少 JavaConversions 导入。您的代码将编译为:

import scala.collection.JavaConversions._
class ProcessData(var distanceMap : java.util.Map[java.lang.String , java.util.List[TestObject]]) {
    def apply = {
      val m2: Map[String, Any] = distanceMap.toMap
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2011-03-26
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多