2010-06-27 78 views
27

如何将java.util.Map [String,Object]转换为scala.collection.immutable.Map [字符串,任何],以便原始地图(整数,布尔等)中的所有值都转换为正确的值,以便在Scala中很好地工作。将java.util.Map [String,Object]转换为scala.collection.immutable.Map [String,Any]

+0

添加标签----- – pakore 2010-06-27 12:06:36

+0

我不知道斯卡拉,但不能怎么做,如果(objecdt的instanceof整数)...等等上?这不是最好的方法,但它应该工作......也许你可以包装对象和使用访问者模式... – pakore 2010-06-27 12:12:54

回答

32

作为VonC说,scala.collections.JavaConversion只支持可变集合,但你不必使用一个单独的库。可变集合从TraversableOnce,其限定了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) 
+0

这回答了我的问题。在我的更具体的情况下,我需要映射的地图的值,所以m.map {...}(breakOut)也做了诡计 – IttayD 2010-06-27 12:48:15

+0

不错 - 这对我很有用! – javadba 2017-06-06 22:33:17

1

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

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 
+0

JavaConversions只是映射的对象本身,而不是它的值 – IttayD 2010-06-27 12:34:50

1

为了转换转换java.util.Map [字符串,对象]至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. 
相关问题