Comment convertir Scala scala.List
en Java java.util.List
?
Comment convertir Scala scala.List
en Java java.util.List
?
Réponses:
La liste Scala et la liste Java sont deux bêtes différentes, car la première est immuable et la seconde est mutable. Donc, pour passer de l'un à l'autre, vous devez d'abord convertir la liste Scala en une collection mutable.
Sur Scala 2.7:
import scala.collection.jcl.Conversions.unconvertList
import scala.collection.jcl.ArrayList
unconvertList(new ArrayList ++ List(1,2,3))
À partir de 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): _*)
Cependant, asList
dans cet exemple, il n'est pas nécessaire si le type attendu est un Java List
, car la conversion est implicite, comme le montre la dernière ligne.
scala.collection.JavaConverters
partir de 2.12
Je ne sais pas pourquoi cela n'a pas été mentionné auparavant, mais je pense que le moyen le plus intuitif est d'appeler la asJava
méthode décoratrice de JavaConverters directement sur la liste Scala:
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]
En supposant que nous avons les éléments suivants List
:
scala> val scalaList = List(1,2,3)
scalaList: List[Int] = List(1, 2, 3)
Si tu veux etre explicite et dire exactement ce que vous voulez convertir:
scala> import scala.collection.JavaConverters._
import scala.collection.JavaConverters._
scala> scalaList.asJava
res11: java.util.List[Int] = [1, 2, 3]
Si vous ne voulez pas co-contrôler les conversions et laissez le compilateur faire un travail implicite pour vous:
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]
C'est à vous de décider comment vous souhaitez contrôler votre code.
En commençant Scala 2.13
, le package scala.jdk.CollectionConverters
fournit asJava
via un souteneur Seq
et remplace les packages 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]
Jolies questions anciennes, je vais y répondre, mais la plupart des suggestions sont obsolètes.
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
Mettre à jour
avec scala 2.9.2:
import scala.collection.JavaConversions._
import scala.collection.mutable.ListBuffer
val x: java.util.List[Int] = ListBuffer( List( 1, 2, 3 ): _* )
résultat
[1, 2, 3]
Depuis Scala 2.12.0 JavaConversions est obsolète.
La solution la plus simple pour moi était donc:
java.util.Arrays.asList("a","b","c")
import scala.collection.JavaConverters._
pour 2.12.4