Wie konvertiert man eine scala.List in eine java.util.List?

Lesezeit: 3 Minuten

Benutzer-Avatar
Alex Baranoski

So konvertieren Sie Scalas scala.List in Javas java.util.List?

  • Alter … ändere die akzeptierte Antwort … (bitte)

    – fletch

    7. Dezember 2018 um 1:19 Uhr

Ich bin mir nicht sicher, warum dies noch nicht erwähnt wurde, aber ich denke, der intuitivste Weg ist, die aufzurufen asJava Dekorateur-Methode von JavaConverter direkt auf der Scala-Liste:

scala> val scalaList = List(1,2,3)
scalaList: List[Int] = List(1, 2, 3)

scala> import scala.collection.JavaConverters._
import scala.collection.JavaConverters._

scala> scalaList.asJava
res11: java.util.List[Int] = [1, 2, 3]

  • Es erfordert auch, dass Sie explizit sind, anstatt sich auf implizite Magie zu verlassen, die irgendwann unerwünscht sein könnte.

    – Kamil Lelonek

    28. November 2014 um 11:56 Uhr

  • Dies verursacht Probleme, wenn die Liste für die spätere Verwendung in Java-Code serialisiert wird … es führt zu ClassNotFoundException: scala.collection.convert.Wrappers. Arrays.asList(foo : _*) funktioniert in diesem Fall.

    – Mohan

    27. Juni 2015 um 11:41 Uhr

  • Ich komme jedes Mal auf diese Seite, wenn ich Java in Scala verwenden muss. Leider gibt es keine Möglichkeit, mir einen geeigneten Importvorschlag für “.asJava” vorzuschlagen ((

    – Mulja

    13. September 2019 um 9:20 Uhr

Benutzer-Avatar
Daniel C. Sobral

Scala List und Java List sind zwei verschiedene Bestien, da Ersteres unveränderlich und Letzteres veränderlich ist. Um also von einem zum anderen zu gelangen, müssen Sie zuerst die Scala-Liste in eine veränderliche Sammlung konvertieren.

Auf Scala 2.7:

import scala.collection.jcl.Conversions.unconvertList
import scala.collection.jcl.ArrayList
unconvertList(new ArrayList ++ List(1,2,3))

Ab Scala 2.8:

import scala.collection.JavaConversions._
import scala.collection.mutable.ListBuffer
asList(ListBuffer(List(1,2,3): _*))
val x: java.util.List[Int] = ListBuffer(List(1,2,3): _*)

Jedoch, asList in diesem Beispiel ist nicht erforderlich, wenn der erwartete Typ Java ist Listda die Konvertierung implizit ist, wie die letzte Zeile zeigt.

  • Der Wert x: java.util.List[Int] ist immer noch unveränderlich. Versuchen Sie es einfach in Java mit x.add(something) – es wird einen Fehler auslösen

    – Vitamin

    8. Mai 2013 um 12:48 Uhr


  • @Vitamon Es gibt keinen Fehler für mich aus – ich habe es nur zur Bestätigung getestet.

    – Daniel C. Sobral

    8. Mai 2013 um 16:46 Uhr

  • Verworfen zugunsten von scala.collection.JavaConverters ab 2.12

    – Jeroen Kransen

    4. Februar 2019 um 13:54 Uhr

  • für 2.12.1 hatte ich beim sofortigen Iterieren über die Java-Liste mit einer Scala-for-Schleife mehr Glück mit asScalaBuffer() im JavaConverters-Paket: scala-lang.org/api/2.12.1/scala/collection/JavaConverters$.html

    – Sarah Messer

    4. September 2019 um 13:43 Uhr

Um die bisherigen Antworten zusammenzufassen

Angenommen wir haben folgendes List:

scala> val scalaList = List(1,2,3)
scalaList: List[Int] = List(1, 2, 3)

Wenn du sein willst explizit und genau sagen was du umwandeln willst:

scala> import scala.collection.JavaConverters._
import scala.collection.JavaConverters._

scala> scalaList.asJava
res11: java.util.List[Int] = [1, 2, 3]

Wenn du Ich möchte keine Conversions mitsteuern und Compiler machen lassen implizit Arbeite für dich:

scala> import scala.collection.JavaConversions._
import scala.collection.JavaConversions._

scala> val javaList: java.util.List[Int] = scalaList
javaList: java.util.List[Int] = [1, 2, 3]

Es liegt an Ihnen, wie Sie Ihren Code steuern möchten.

Benutzer-Avatar
Xavier Guihot

Beginnend Scala 2.13das Paket scala.jdk.CollectionConverters bietet asJava über einen Zuhälter von Seq und ersetzt Pakete scala.collection.JavaConverters/JavaConversions:

import scala.jdk.CollectionConverters._

// val scalaList: List[Int] = List(1, 2, 3)
scalaList.asJava
// java.util.List[Int] = [1, 2, 3]

Ziemlich alte Fragen, obwohl ich sie beantworten werde, gegeben, aber die meisten Vorschläge sind veraltet.

import scala.collection.JavaConversions.seqAsJavaList

val myList = List("a", "b", "c")
val myListAsJavaList = seqAsJavaList[String](myList)

  • object JavaConversions in package collection is deprecated (since 2.12.0): use JavaConverters

    – Prayagupa

    13. Juni 2017 um 23:42 Uhr

Benutzer-Avatar
Guillaume Masse

Aktualisieren

mit Scala 2.9.2:

import scala.collection.JavaConversions._
import scala.collection.mutable.ListBuffer
val x: java.util.List[Int] = ListBuffer( List( 1, 2, 3 ): _* )

Ergebnis

[1, 2, 3]

  • object JavaConversions in package collection is deprecated (since 2.12.0): use JavaConverters

    – Prayagupa

    13. Juni 2017 um 23:42 Uhr

Benutzer-Avatar
Stefan W.

Für einzelne Aufrufe ist es möglicherweise die einfachste Lösung, dies von Hand zu tun:

val slist = List (1, 2, 3, 4)          
val jl = new java.util.ArrayList [Integer] (slist.size)
slist.foreach (jl.add (_))   

Leistung habe ich nicht gemessen.

1329790cookie-checkWie konvertiert man eine scala.List in eine java.util.List?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy