Cómo convertir de java.util.Map a un mapa de Scala

Una API de Java devuelve unjava.util.Map<java.lang.String,java.lang.Boolean>;. Me gustaría poner eso en unaMap[String,Boolean]

Así que imagina que tenemos:

<code>var scalaMap : Map[String,Boolean] = Map.empty
val javaMap = new JavaClass().map()   // Returns java.util.Map<java.lang.String,java.lang.Boolean>
</code>

No puedes hacerMap.empty ++ javaMap, porque el método ++ no conoce los mapas de Java. Lo intenté:

<code>scalaMap = Map.empty ++ new collection.jcl.MapWrapper[String,Boolean] {
    override def underlying = javaMap
}
</code>

y:

<code>scalaMap = Map.empty ++ new collection.jcl.MapWrapper[java.lang.String,java.lang.Boolean] {
    override def underlying = javaMap
  }
</code>

Ambos fallan en compilar, debido a los genéricos -java.lang.String no es lo mismo que una cadena scala.

¿Hay una buena manera de hacerlo, sin copiar el mapa manualmente?

EDIT: Gracias, todas las buenas respuestas, aprendí mucho de todos ellos. Sin embargo, cometí un error al publicar un problema más simple aquí que el que realmente tengo. Entonces, si me lo permiten, generalizaré la pregunta: lo que realmente devuelve la API es

<code>java.util.Map<java.lang.String, java.util.Map<SomeJavaEnum,java.lang.String>>
</code>

Y necesito mover esto a Map [String, Map [SomeJavaEnum, String]]

Probablemente no parezca una complicación demasiado grande, pero agrega un nivel adicional de borrado de tipo, y la única forma que encontré de mover esto a un mapa de Scala fue copiarlo en profundidad (usando algunas de las técnicas que sugirió a continuación) . ¿Alguien tiene alguna pista? Resolví mi tipo de problema definiendo una conversión implícita para mis tipos exactos, de modo que al menos la fealdad está oculta en su propio rasgo, pero todavía me siento un poco torpe al copiar el lote.

Respuestas a la pregunta(4)

Su respuesta a la pregunta