我有两个java映射,它将String映射到一组字符串。
我想将java地图转换为Scala和"添加" map1到map2,如果它们都具有相同的键,则结果映射中的值将是2个值集的并集。我为地图添加找到了一个很好的解决方案:
map1 ++ map2.map { case (k,v) => k -> (v ++ map1.getOrElse(k,v))}
当我通过' asScala'将Java地图转换为Scala时,问题就出现了。呼叫。当我们进行这个对话时,我们得到:
转换为Scala后,我无法再在这些包装器集合上运行上述解决方案。仍然定义了地图上的++操作。但是,SetWrapper类没有定义++操作。据我所知,SetWrapper根本没有定义任何操作!以下是文档的完整定义:
SetWrapper似乎扩展了一个抽象类,并没有定义任何功能。
如何解决此问题?是否有另一个对话步骤到真正的Set对象?
答案 0 :(得分:2)
JMapWrapper
在Scala Map
中包装Java Map
; SetWrapper
将Scala Set
包装在Java Set
中。所以它有Set
的Java方法,而不是Scala的方法。
您不提供类型,但似乎您从java.util.Map[SomeKey, java.util.Set[SomeType]]
开始。在其上调用asScala
只会转换外部Map
,而不是其值。您可以使用javaMap.asScala.mapValues(_.asScala)
解决此问题(通常需要注意的是,每次访问值时都会调用asScala
;如果不可接受,请使用.map
。< / p>