Lié à la question Stack Overflow, équivalent Scala du nouveau HashSet (Collection) , comment convertir une collection Java (par java.util.List
exemple) en une collection Scala List
?
J'essaie en fait de convertir un appel d'API Java en Spring SimpleJdbcTemplate
, qui renvoie a java.util.List<T>
, en un Scala immuable HashSet
. Donc par exemple:
val l: java.util.List[String] = javaApi.query( ... )
val s: HashSet[String] = //make a set from l
Cela semble fonctionner. La critique est la bienvenue!
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
la source
la source
Pour référence future: Avec Scala 2.8, cela pourrait être fait comme ceci:
set
est unscala.collection.immutable.Set[String]
après ça.Voir également la réponse de Ben James pour une manière plus explicite (en utilisant JavaConverters), qui semble être recommandée maintenant.
la source
JavaConversions
a des implicites rendant l'toSet
appel non nécessaire.Si vous voulez être plus explicite que les JavaConversions démontrées dans la réponse de robinst , vous pouvez utiliser JavaConverters:
la source
JavaConversions ( réponse de robinst ) et JavaConverters ( réponse de Ben James ) sont obsolètes avec Scala 2.10 .
Au lieu de JavaConversions, utilisez:
comme suggéré par aleksandr_hramcov .
Au lieu de JavaConverters, utilisez:
Pour les deux, il est également possible d'importer uniquement les conversions / convertisseurs vers Java ou Scala respectivement, par exemple:
Mise à jour: La déclaration ci-dessus selon laquelle JavaConversions et JavaConverters étaient obsolètes semble être fausse. Il y avait des propriétés obsolètes dans Scala 2.10, ce qui entraînait des avertissements d'obsolescence lors de leur importation. Les importations alternatives ici semblent donc être uniquement des alias. Bien que je les préfère toujours, comme à mon humble avis, les noms sont plus appropriés.
la source
Vous pouvez également explorer cette excellente bibliothèque: scalaj-collection qui a une conversion bidirectionnelle entre les collections Java et Scala. Dans votre cas, pour convertir une java.util.List en liste Scala, vous pouvez le faire:
la source
À partir de
Scala 2.13
, le packagescala.jdk.CollectionConverters
remplace les packagesscala.collection.JavaConverters/JavaConversions._
:la source
la source
Vous pouvez ajouter les informations de type dans l'appel toArray pour que l'ensemble soit paramétré:
Cela peut être préférable car le package de collections subit une refonte majeure pour Scala 2.8 et le package scala.collection.jcl disparaît
la source
Vous pouvez convertir la collection Java en un tableau, puis créer une liste Scala à partir de cela:
la source
Un autre moyen simple de résoudre ce problème:
la source