java - 如何在 Java 中将 java.util.Map 转换为 scala.collection.immutable.Map?

标签 java scala scala-collections scala-java-interop

我发现很多人都在尝试这样做,并询问这个问题,但问题总是根据 scala 代码来回答。我需要调用一个需要 scala.collection.immutable.Map 的 API,但我有一个 java.util.Map,如何在我的 java 代码中将后者干净地转换为前者?编译器不同意它是隐式转换的观点,因为当我尝试它时它拒绝了!

谢谢!

最佳答案

获得一个不可变的 Scala 映射有点棘手,因为集合库提供的转换返回所有返回可变的,你不能只使用 toMap 因为它需要一个隐式参数,Java编译器当然不会提供。使用该隐式参数的完整解决方案如下所示:

import scala.collection.JavaConverters$;
import scala.collection.immutable.Map;

public class Whatever {
  public <K, V> Map<K, V> convert(java.util.Map<K, V> m) {
    return JavaConverters$.MODULE$.mapAsScalaMapConverter(m).asScala().toMap(
      scala.Predef$.MODULE$.<scala.Tuple2<K, V>>conforms()
    );
  }
}

使用 JavaConversions 在 Java 中编写转换更简洁一些,但在 Scala 方面,基本上每个人都希望尽快弃用这 block 废话,所以即使在这里我也会避免它。

关于java - 如何在 Java 中将 java.util.Map 转换为 scala.collection.immutable.Map?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24416480/

相关文章:

java - 如何限制 akka actor 一次只做一项工作

scala - 为什么reduceLeft的类型参数包含下界?

scala - 重新分配给 Scala 中的 val

java - 插件org.jooq.pro :jooq-codegen-maven or one of its dependencies could not be resolved

java - J2ME Location Based API 可以在没有 GPS 的情况下工作吗

algorithm - 高效的分布式算法,用于合并具有公共(public)元素的集合

scala - 需要澄清混淆 Http4s 消息类型 `Response[F]`/ `Request[F]`

scala - 如何将可变 HashMap 转换为 Scala 中的不可变等价物?

java - 通过反射识别 JAX-RS 上的 HTTP 动词

java - 使用 java 1.4 进行模拟