2017-05-30 313 views
1

調用標準方法我有兩個Java的地圖,其中映射字符串一組字符串。斯卡拉:包裝上的Java地圖後,斯卡拉轉換

我想java的地圖轉換成Scala和「添加」 MAP1到MAP2這樣,如果他們都具有相同的鍵在合成圖中的值將是2值集合的並集。我發現地圖上增加了一個很好的解決方案:

map1 ++ map2.map { case (k,v) => k -> (v ++ map1.getOrElse(k,v))} 

,當我通過「asScala」呼叫轉換的java映射到斯卡拉的問題發生。當我們這樣做的談話,我們得到:

enter image description here

轉換爲斯卡拉後,我不再能夠對這些包裝集合運行上面的解決方案。地圖上的++操作仍然定義。但是SetWrapper類沒有定義一個++操作。據我所知,SetWrapper根本沒有定義任何操作!下面是從文檔的完整定義:

enter image description here

SetWrapper似乎擴展一個抽象類,沒有定義任何的功能。

我怎樣才能解決這個問題得到什麼?是否有另一個對話步驟到一個真正的Set對象?

回答

2

JMapWrapper將Java Map包裝在Scala中Map; SetWrapper包裝Scala的Set在Java Set。所以它具有Java的方法Set,而不是Scala的。

你沒有提供的類型,但它似乎你以一個java.util.Map[SomeKey, java.util.Set[SomeType]]。調用asScala就可以了,只會轉換外部Map,而不是它的值。可以通過使用javaMap.asScala.mapValues(_.asScala)解決這個(與通常的需要提醒的是,它會調用asScala每一個值被訪問時,使用.map代替,如果這是不能接受的)。