Here’s a quick look at how to convert a Java Map (such as HashMap) to a Scala Map
using the JavaConverters
object:
// import what you need
import java.util._
import scala.collection.JavaConverters._
// create and populate a java map
val jMap = new HashMap[String, String]()
jMap.put("first_name", "Alvin")
jMap.put("last_name", "Alexander")
// convert the java map to a scala map
val sMap = jMap.asScala
The key there is knowing that importing the JavaConverters object creates a method named asScala
on the Java Map, and that method creates a Scala Map from the Java Map.
A second key is knowing that the JavaConversions object is deprecated, and you should use JavaConverters instead of JavaConversions.
UPDATE: In Scala 2.13 the JavaConverters class was moved to scala.jdk.CollectionConverters.
Example in the REPL
Here’s what that sequence looks like in the Scala REPL:
scala> import java.util._
import java.util._
scala> import scala.collection.JavaConverters._
import scala.collection.JavaConverters._
scala> val jMap = new HashMap[String, String]()
jMap: java.util.HashMap[String,String] = {}
scala> jMap.put("first_name", "Alvin")
res3: String = null
scala> jMap.put("last_name", "Alexander")
res4: String = null
scala> val sMap = jMap.asScala
sMap: scala.collection.mutable.Map[String,String] =
Map(last_name -> Alexander, first_name -> Alvin)
toMap
As shown, that creates a Scala mutable Map. If you need an immutable Map, just call toMap
(which is a normal Scala method on a mutable Map, and has nothing to do with JavaConverters):
scala> val iMap = sMap.toMap
iMap: scala.collection.immutable.Map[String,String] =
Map(last_name -> Alexander, first_name -> Alvin)
asJava
The JavaConverters object also lets you convert a Scala Map to a Java Map using asJava
:
scala> val jMap2 = iMap.asJava
jMap2: java.util.Map[String,String] = {last_name=Alexander, first_name=Alvin}
The Scala JavaConverters object and Maps
The JavaConverters scaladoc shows that you can make the following conversions to/from Java and Scala map-related types using asScala
, asJava
, and asJavaDictionary
:
// asScala and asJava
scala.collection.mutable.Map <=> java.util.Map
scala.collection.concurrent.Map <=> java.util.concurrent.ConcurrentMap
// asScala, asJavaDictionary
scala.collection.mutable.Map <=> java.util.Dictionary
// asJava
scala.collection.Map => java.util.Map
I’ll write more about the Scala JavaConverters object over time, but until then, I hope this example is helpful.
this post is sponsored by my books: | |||
#1 New Release |
FP Best Seller |
Learn Scala 3 |
Learn FP Fast |