Неявные преобразования, такие как предоставляемые JavaConversions, работают на уровне экземпляра, а не на уровне типа. Таким образом, хотя внешняя карта может быть преобразована, внутренние карты не будут.
Невозможно напрямую преобразовать вложенный регистр. И, к сожалению, кажется, что наиболее конкретное неявное значение неправильно выбирается в следующих примерах:
scala> val storage = new ConcurrentHashMap[String,ConcurrentHashMap[Int,ConcurrentHashMap[String,Double]]]
storage: java.util.concurrent.ConcurrentHashMap[String,java.util.concurrent.ConcurrentHashMap[Int,java.util.concurrent.ConcurrentHashMap[String,Double]]] = {}
scala> import scala.collection.JavaConverters._
scala> for ((i, m) <- storage.asScala; (j, m2) <- m.asScala; (k, l) <- m2.asScala) yield ((i, j) -> (k, l))
res0: scala.collection.mutable.Map[(String, Int),(String, Double)] = Map()
scala> import scala.collection.JavaConversions._
scala> for ((i, m) <- storage; (j, m2) <- m; (k, l) <- m2) yield ((i, j) -> (k, l))
res3: scala.collection.mutable.Map[(String, Int),(String, Double)] = Map()
Итак, в конечном счете, я предсказываю много аннотаций типов в вашем будущем (приведенные выше определения, вероятно, будут работать с явным присваиванием типов, но я слишком сонный, чтобы все это печатать).