首页 文章

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

提问于
浏览
1

关于Scala / Java可变/不可变转换有很多类似的问题,但我找不到这个确切的问题 .

我有一个Java方法,它使用scala.collection.immutable.Map m . 我需要插入/删除一些条目,然后返回新的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();

但是必须在 Map 类型之间进行两次转换是非常难看的 . 我认为理想的解决方案是将不可变的scala映射转换为可变的scala映射,然后执行操作并返回它,但是我找不到任何关于将不可变的scala映射转换为Java中的可变scala映射的文档或示例 .

任何帮助深表感谢 .

1 回答

  • 1

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

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

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

相关问题