I'm using some Scala library from my Java code. And I have a problem with collections. I need to pass scala.collection.immutable.Map as a parameter of a method. I can convert or build immutable.Map from my Java code but I do not know how to do it. Suggestions?
解决方案
It's entirely possible to use JavaConverters in Java code—there are just a couple of additional hoops to jump through:
import java.util.HashMap;
import scala.Predef;
import scala.Tuple2;
import scala.collection.JavaConverters;
import scala.collection.immutable.Map;
public class ToScalaExample {
public static Map toScalaMap(HashMap m) {
return JavaConverters.mapAsScalaMapConverter(m).asScala().toMap(
Predef.>conforms()
);
}
public static HashMap example() {
HashMap m = new HashMap();
m.put("a", "A");
m.put("b", "B");
m.put("c", "C");
return m;
}
}
We can show that this works from the Scala REPL:
scala> val jm: java.util.HashMap[String, String] = ToScalaExample.example
jm: java.util.HashMap[String,String] = {b=B, c=C, a=A}
scala> val sm: Map[String, String] = ToScalaExample.toScalaMap(jm)
sm: Map[String,String] = Map(b -> B, c -> C, a -> A)
But of course you could just as easily call these methods from Java code.