我发现很多人都在尝试这样做,并询问这个问题,但问题总是根据 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/