2010-06-27 79 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. 
相關問題