Conversão implícita entre coleções java e scala usando JavaConversions
Eu fundei uma scalaSet
de scalaMap
s usando uma função genérica
def mergeMaps[A, B](ms: Set[Map[A, B]])(f: (B, B) => B): Map[A, B] =
(Map[A, B]() /: (for (m <- ms; kv <- m) yield kv))
{
(a, kv) =>
a + (if (a.contains(kv._1)) kv._1 -> f(a(kv._1), kv._2) else kv)
}
Isso lida com o caso quando há um choque das mesmas chaves. No entanto, eu queria fazer isso com coleções Java no Scala Code. Eu pesquisei um pouco e me depareiJavaConversions
. Eu o importei e escrevi isso
def mergeMaps[A, B](ms: Set[Map[A, B]])(f: (B, B) => B): Map[A, B] =
(new util.HashMap[A, B] /: (for (m <- ms; kv <- m) yield kv))
{
case (a, kv) =>
a + (if (a.contains(kv._1)) kv._1 -> f(a(kv._1), kv._2) else kv)
}
No entanto, ele diz que há uma incompatibilidade de tipo
Error:(67, 11) type mismatch;
found : scala.collection.mutable.Map[A,B]
required: java.util.HashMap[A,B]
a + (if (a.contains(kv._1)) kv._1 -> f(a(kv._1), kv._2) else kv)
^
Não éJavaConversions
usado para converter implicitamenteutil.HashMap
paramutable.Map
? O que estou perdendo aqui?