@ retronym Antwort gut ist, wenn Ihre Sammlungen homogen sind, aber es schien nicht, für mich zu arbeiten, wenn ich eine gemischte Sammlung hatte. Zum Beispiel:
val x = Map(5 -> Array(1, List(2, 7), 3), 6 -> Map(5 -> List(7, 8, 9)))
zu konvertieren, eine solche Sammlung zu Java, müssen Sie auf Laufzeittypen verlassen, da die Art der x
ist nicht etwas, das rekursiv auf Java bei der Kompilierung umgewandelt werden können. Hier ist ein Verfahren, das gemischte scala Sammlungen Java Umwandlung verarbeiten kann:
def convert(x:Any):Any =
{
import collection.JavaConversions._
import collection.JavaConverters._
x match
{
case x:List[_] => x.map{convert}.asJava
case x:collection.mutable.ConcurrentMap[_, _] => x.mapValues(convert).asJava
case x:collection.mutable.Map[_, _] => x.mapValues(convert).asJava
case x:collection.immutable.Map[_, _] => x.mapValues(convert).asJava
case x:collection.Map[_, _] => x.mapValues(convert).asJava
case x:collection.mutable.Set[_] => x.map(convert).asJava
case x:collection.mutable.Buffer[_] => x.map(convert).asJava
case x:Iterable[_] => x.map(convert).asJava
case x:Iterator[_] => x.map(convert).asJava
case x:Array[_] => x.map(convert).toArray
case _ => x
}
}
Ein ähnliches Verfahren kann zur Umwandlung von Java nach Scala geschrieben werden.
Beachten Sie, dass der Rückgabetyp dieser Methode Any
ist. Um den zurückgegebenen Wert zu verwenden, müssen Sie möglicherweise eine Umwandlung durchführen: val y = convert(x).asInstanceOf[java.util.Map[Int, Any]]
.
Ist das nicht mehr ein Designproblem? Was ist die Semantik dieser Struktur? Warum möchten Sie die Objekte konvertieren? –
Eigentlich lese ich diese Daten aus einer JSON-Datei durch Jackson JSON-Bibliothek (ich versuchte sjson und Lift-JSON beide fehlgeschlagen). Jackson Json hat keine Scala API, also habe ich Java API benutzt, um den Job zu machen. –