斯卡拉:包装上的Java地图后,斯卡拉转换
问题描述:
调用标准方法我有两个Java的地图,其中映射字符串一组字符串。斯卡拉:包装上的Java地图后,斯卡拉转换
我想java的地图转换成Scala和“添加” MAP1到MAP2这样,如果他们都具有相同的键在合成图中的值将是2值集合的并集。我发现地图上增加了一个很好的解决方案:
map1 ++ map2.map { case (k,v) => k -> (v ++ map1.getOrElse(k,v))}
,当我通过“asScala”呼叫转换的java映射到斯卡拉的问题发生。当我们这样做的谈话,我们得到:
转换为斯卡拉后,我不再能够对这些包装集合运行上面的解决方案。地图上的++操作仍然定义。但是SetWrapper类没有定义一个++操作。据我所知,SetWrapper根本没有定义任何操作!下面是从文档的完整定义:
SetWrapper似乎扩展一个抽象类,没有定义任何的功能。
我怎样才能解决这个问题得到什么?是否有另一个对话步骤到一个真正的Set对象?
答
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
代替,如果这是不能接受的)。