Implizite Konvertierung zwischen Java- und Scala-Sammlungen mit JavaConversions
Ich habe eine Waage zusammengeführtSet
von scalaMap
s mit einer generischen Funktion
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)
}
Dies behandelt den Fall, wenn die gleichen Tasten aufeinander treffen. Ich wollte es jedoch mit Java-Sammlungen in Scala Code machen. Ich habe ein bisschen recherchiert und bin auf @ gestoßJavaConversions
. Ich habe es importiert und dieses @ geschrieb
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)
}
s heißt jedoch, dass es eine Typinkongruenz gib
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)
^
Ist nichtJavaConversions
wird verwendet, um implizit @ zu konvertierutil.HashMap
zumutable.Map
? Was vermisse ich hier?