关于Scala / Java可变/不可变转换,有很多类似的问题,但我无法找到这个确切的问题。
我有一个使用scala.collection.immutable.Map m
的Java方法。我需要插入/删除一些条目,然后返回新的scala映射(不可变或可变 - 它并不重要)。
目前,我正在执行以下操作:
java.util.HashMap<T1, T2> javaMap = new java.util.HashMap<>(
(Map<T1, T2>) JavaConverters.mapAsJavaMapConverter(m).asJava());
javaMap.put(k1, v1);
javaMap.remove(k2);
return scala.collection.JavaConverters.mapAsScalaMapConverter(javaMap).asScala();
但是必须在地图类型之间进行两次转换是非常难看的。我认为理想的解决方案是将不可变的scala映射转换为可变的scala映射,然后执行操作并返回它,但我找不到任何关于将不可变的scala映射转换为可变scala映射的文档或示例Java的。
非常感谢任何帮助。
答案 0 :(得分:1)
您可以尝试直接使用scala immutable map:
return m
.$plus(Tuple2.apply(k1, v1))
.$minus(k2)
您可以看到语法并不漂亮,有时IDE在java中使用scala方法时会抱怨,但如果您想避免来回转换,我看不到其他选项。