![](/img/trans.png)
[英]convert java.util.Map[String, Object] to scala.collection.immutable.Map[String, Any]
[英]How do I convert a java.util.Map to scala.collection.immutable.Map in Java?
我发现很多人都试图这样做,并询问这个问题,但问题总是以scala代码的形式回答。 我需要调用一个期望scala.collection.immutable.Map的API,但我有一个java.util.Map,如何在我的java代码中从后者干净地转换为前者? 编译器不同意这种情绪,即它是一种隐式转换,因为当我尝试它时就会对它进行barfs!
谢谢!
获取不可变的Scala映射有点棘手,因为集合库提供的转换返回所有返回可变的toMap
,并且您不能只使用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中编写转换更加JavaConversions
,但在Scala方面基本上每个人都希望尽快废弃这些废话,所以即使在这里也要避免使用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.