Как конфертировать из java.util.Map в карту Scala

Java API возвращаетjava.util.Map<java.lang.String,java.lang.Boolean>;. Я хотел бы поместить это вMap[String,Boolean]

Итак, представьте, что мы имеем:

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

Вы не можете сделатьMap.empty ++ javaMap, потому что метод ++ не знает о картах Java. Я старался:

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

а также:

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

Они оба не компилируются из-за обобщений -java.lang.String это не то же самое, что Scala String.

Есть ли хороший способ сделать это, кроме копирования карты вручную?

РЕДАКТИРОВАТЬ: Спасибо, все хорошие ответы, я многому научился у всех. Однако я допустил ошибку, разместив здесь более простую проблему, чем та, которая у меня есть на самом деле. Итак, если вы позволите мне, я обобщу вопрос: что API на самом деле возвращает

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

И мне нужно переместить это в Map [String, Map [SomeJavaEnum, String]]

Возможно, это не кажется слишком сложным, но добавляет дополнительный уровень стирания типов, и единственный способ, с помощью которого я переместил это на карту Scala, - это его глубокое копирование (используя некоторые методы, которые вы предложили ниже) , Есть какие-нибудь намеки? Я как бы решил свою проблему, определив неявное преобразование для моих точных типов, так что, по крайней мере, уродство скрыто в его собственной черте, но все еще кажется немного неуклюжимым глубоким копированием партии.

Ответы на вопрос(4)

Ваш ответ на вопрос