【问题标题】:convert java.util.Map[String, Object] to scala.collection.immutable.Map[String, Any]将 java.util.Map[String, Object] 转换为 scala.collection.immutable.Map[String, Any]
【发布时间】:2011-03-08 19:42:02
【问题描述】:

如何将 java.util.Map[String, Object] 转换为 scala.collection.immutable.Map[String, Any],以便将原始映射中的所有值(整数、布尔值等)转换为在 Scala 中运行良好的正确值。

【问题讨论】:

  • 我不知道 scala,但你不能做 if(objecdt instanceof Integer)... 等等吗?这不是最好的方法,但它应该可以工作......也许你可以包装对象并使用访问者模式......

标签: java scala scala-collections


【解决方案1】:

正如 VonC 所说,scala.collections.JavaConversion 仅支持可变集合,但您不必使用单独的库。可变集合派生自 TraversableOnce,它定义了一个返回不可变 Map 的 toMap 方法:

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)

这将输出

Map(Foo -> true, Bar -> 1)

【讨论】:

  • 这回答了我的问题。在我更具体的情况下,我需要映射地图的值,所以 m.map{...}(breakOut) 也成功了
【解决方案2】:

Scala2.8 的 JavaConversions 包只处理可变集合。

scalaj-collection 库可能会有所帮助。

java.util.Map[A, B]       #asScala: scala.collection.Map[A, B]
                          #asScalaMutable: scala.collection.mutable.Map[A, B]
                          #foreach(((A, B)) => Unit): Unit

【讨论】:

  • JavaConversions 只是 Map 对象本身的映射,而不是它的值
【解决方案3】:

为了将 convert java.util.Map[String, Object] 转换为 scala.collection.immutable.Map[String,Object] ,您需要在 Scala 项目中简单地导入以下语句并清理构建。

import collection.JavaConversions._

参考以下代码:

var empMap= Map[String.Object]()
var emp= new Employee(empMap)  // Employee is java  POJO in which,passing scala map  to overloaded constructor for setting default values.

【讨论】:

    猜你喜欢
    • 2017-09-28
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    • 2014-01-29
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多