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

我发现很多人都试图这样做,并询问这个问题,但问题始终是用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  Map convert(java.util.Map m) { return JavaConverters$.MODULE$.mapAsScalaMapConverter(m).asScala().toMap( scala.Predef$.MODULE$.>conforms() ); } } 

使用JavaConversions在Java中编写转换更加JavaConversions ,但在Scala方面基本上每个人都希望尽快废弃这些垃圾,所以即使在这里也要避免使用它。