2017-05-30 317 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代替,如果这是不能接受的)。