Bezogen auf Stack - Überlauf Frage Scala Äquivalent neuen HashSet (Collection) , wie konvertiere ich eine Java - Sammlung ( java.util.List
sagen wir) in eine Scala Sammlung List
?
Ich versuche tatsächlich, einen Java-API-Aufruf in Spring's SimpleJdbcTemplate
, der a zurückgibt java.util.List<T>
, in eine unveränderliche Scala umzuwandeln HashSet
. Also zum Beispiel:
val l: java.util.List[String] = javaApi.query( ... )
val s: HashSet[String] = //make a set from l
Das scheint zu funktionieren. Kritik ist willkommen!
import scala.collection.immutable.Set
import scala.collection.jcl.Buffer
val s: scala.collection.Set[String] =
Set(Buffer(javaApi.query( ... ) ) : _ *)
java
scala
scala-collections
scala-2.7
oxbow_lakes
quelle
quelle
Zum späteren Nachschlagen: Mit Scala 2.8 könnte dies folgendermaßen geschehen:
set
ist einscala.collection.immutable.Set[String]
danach.Siehe auch die Antwort von Ben James für einen expliziteren Weg (mit JavaConverters), der jetzt empfohlen zu werden scheint.
quelle
JavaConversions
einige Implikationen, die dentoSet
Anruf nicht notwendig machen.Wenn Sie expliziter sein möchten als die in der Antwort von robinst gezeigten JavaConversions , können Sie JavaConverters verwenden:
quelle
JavaConversions ( Antwort von robinst ) und JavaConverters ( Antwort von Ben James ) sind mit Scala 2.10 veraltet .
Verwenden Sie anstelle von JavaConversions :
wie von aleksandr_hramcov vorgeschlagen .
Verwenden Sie anstelle von JavaConverters :
Für beide gibt es auch die Möglichkeit, nur die Konvertierungen / Konverter nach Java bzw. Scala zu importieren, zB:
Update: Die obige Aussage, dass JavaConversions und JavaConverters veraltet waren, scheint falsch zu sein. In Scala 2.10 gab es einige veraltete Eigenschaften, die beim Import zu veralteten Warnungen führten. Die alternativen Importe hier scheinen also nur Aliase zu sein. Obwohl ich sie immer noch bevorzuge, sind die Namen meiner Meinung nach angemessener.
quelle
Vielleicht möchten Sie auch diese hervorragende Bibliothek erkunden: Scalaj-Sammlung mit bidirektionaler Konvertierung zwischen Java- und Scala-Sammlungen. In Ihrem Fall können Sie Folgendes tun, um eine java.util.List in eine Scala-Liste zu konvertieren:
quelle
Beim Starten ersetzt das
Scala 2.13
Paketscala.jdk.CollectionConverters
die Paketescala.collection.JavaConverters/JavaConversions._
:quelle
quelle
Sie können die Typinformationen im toArray-Aufruf hinzufügen, damit das Set parametrisiert wird:
Dies könnte vorteilhaft sein , wenn die Packung Sammlungen wird durch eine große Nacharbeit für Scala gehen 2.8 und das scala.collection.jcl Paket weggeht
quelle
Sie können die Java-Sammlung in ein Array konvertieren und daraus eine Scala-Liste erstellen:
quelle
Ein weiterer einfacher Weg, um dieses Problem zu lösen:
quelle