2015-07-01 4 views
0

Каков правильный способ преобразования переменной типа java.util.HashMap<java.lang.String, java.util.List<java.lang.String>> в Java, ее эквивалент Scala: Map[Map[String, List[String]]]? (С Scala Map, String и List)Вложенная Java-хэш-карта для вложенного преобразования карты Scala

Я пытался использовать import scala.collection.JavaConverters._ и сделать JavaNestedMap.asScala но это не удалось. Есть ли разумный способ сделать это (вместо того, чтобы иметь два map)?

ответ

2

Нет единого способа вызова, о котором я знаю.

Это краткое, вероятно, неэффективное в горячем цикле. Профиль, если он окажется слишком медленным, и тогда вы захотите напрямую использовать сборщиков.

val in: JMap[JMap[String, String]] = ??? 
val out: Map[Map[String, String]] = in.asScala.mapValues(_.asScala) 
val again: JMap[JMap[String, String]] = out.map(_.asJava).asJava 

Стоит отметить, что .asScala дает изменяемую карту для соответствия с Java карте. Если вы хотите получить неизменную карту обратно, вам нужно позвонить .toMap послесловия.

+0

Спасибо за комментарий. Хотя я думаю, что лучше написать последние два шага: 'in.asScala.map {item => (item._1, item._2.asScala.toMap)}. ToMap'. 'toMap' состоит в том, чтобы преобразовать его в« неизменяемую »карту Scala. – Daniel

Смежные вопросы