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 <A, B> Map<A, B> toScalaMap(HashMap<A, B> m) { return JavaConverters.mapAsScalaMapConverter(m).asScala().toMap( Predef.<Tuple2<A, B>>conforms() ); } public static HashMap<String, String> example() { HashMap<String, String> m = new HashMap<String, String>(); 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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With