Scala:在Java到Scala转换后调用包装映射上的标准方法

Scala:在Java到Scala转换后调用包装映射上的标准方法,scala,Scala,我有两个java映射,它们将一个字符串映射到一组字符串 我想将java映射转换为Scala,并将map1“添加”到map2,这样,如果它们都具有相同的键,那么结果映射中的值将是两个值集的并集。我找到了一个很好的地图添加解决方案: map1 ++ map2.map { case (k,v) => k -> (v ++ map1.getOrElse(k,v))} 当我通过'asScala'调用将java映射转换为Scala时,就会出现这个问题。当我们进行此对话时,我们得到: 在转换到

我有两个java映射,它们将一个字符串映射到一组字符串

我想将java映射转换为Scala,并将map1“添加”到map2,这样,如果它们都具有相同的键,那么结果映射中的值将是两个值集的并集。我找到了一个很好的地图添加解决方案:

map1 ++ map2.map { case (k,v) => k -> (v ++ map1.getOrElse(k,v))}
当我通过'asScala'调用将java映射转换为Scala时,就会出现这个问题。当我们进行此对话时,我们得到:

在转换到Scala之后,我不再能够在这些包装器集合上运行上面的解决方案。映射上的++操作仍在定义中。但是,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
,只会转换外部
映射
,而不会转换其值。您可以通过使用
javaMap.asScala.mapValues(u.asScala)
(通常的警告是,每次访问值时它都会调用
asScala
;如果不可接受,则使用
.map