给定一个scala不可变映射,如何在Java中插入/删除条目

时间:2017-11-03 18:59:49

标签: java scala type-conversion mapping

关于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的。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您可以尝试直接使用scala immutable map:

return m
    .$plus(Tuple2.apply(k1, v1))
    .$minus(k2)

您可以看到语法并不漂亮,有时IDE在java中使用scala方法时会抱怨,但如果您想避免来回转换,我看不到其他选项。