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

标签 java scala type-conversion mapping

关于 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 映射,然后执行操作并返回它,但我找不到任何有关在 Java 中将不可变 scala 映射转换为可变 scala 映射的文档或示例。

非常感谢任何帮助。

最佳答案

您可以尝试直接使用scala不可变映射:

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

正如你所看到的,语法并不漂亮,有时 IDE 在 java 中使用 scala 方法时会提示,但如果你想避免来回转换,我没有看到其他选项。

关于java - 给定一个 scala 不可变映射,如何在 Java 中插入/删除条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47102774/

相关文章:

scala - 从 Spark 中的 Google 存储桶中读取文件

java - jBPM如何将某个任务链接到java函数以及如何输出数据?

Scala宏天堂: How do I get an annotation's arguments using macro annotations?

scala - 使用sbt-native-packager获得sbt项目的docker支持时出错

c++ - 如果没有未定义的行为 [c++],哪些浮点值不能转换为 int?

swift - 如何将 UnsafeMutablePointer<Void> 转换为 UInt8?

javascript - Highcharts 如何使用 JavaScript 变量作为系列数据源?

java - 突然出现此错误 java.lang.IllegalStateException : Request cannot be executed; I/O reactor status: STOPPED

java - 如何插入空值 Oracle 类型

java - 使用方法引用而不是多参数 lambda