Question

Comment convertir la scala.List Scala dans la java.util.List Java?

Était-ce utile?

La solution

Scala Liste et Java Liste sont deux bêtes différentes, parce que le premier est immuable et celle-ci est mutable. Alors, pour aller d'un à l'autre, vous devez d'abord convertir la liste Scala dans une collection mutable.

Le Scala 2.7:

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

A partir de Scala 2.8 partir:

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 est pas nécessaire si le type attendu est un List Java, que la conversion est implicite, comme le démontre la dernière ligne.

Autres conseils

Je ne sais pas pourquoi cela n'a pas été mentionné avant, mais je pense que la façon la plus intuitive est d'appeler la méthode décorateur asJava 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]

Pour résumer les réponses précédentes

En supposant que nous avons le List suivant:

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

Si vous voulez être 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 veulent pas les conversions de contrôle co et laissez faire du compilateur implicite travail 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]

Il vous est à la façon dont vous voulez contrôler votre code.

questions assez vieux, mais je répondrai, étant donné, mais la plupart des suggestions sont déconseillés.

import scala.collection.JavaConversions.seqAsJavaList

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

Mise à 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]

À partir Scala 2.13, le paquet scala.jdk.CollectionConverters fournit asJava via un proxénète de Seq et remplace les paquets 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]

Pour les invocations simples, faire à la main pourrait être la solution la plus simple:

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

Je n'ai pas mesuré la performance.

faire Tout comme proposé ci-dessus produit la liste immuable même sur le côté Java. La solution de travail que j'ai trouvé est le suivant:

def toJList[T](l:List[T]):util.List[T] = {
  val a = new util.ArrayList[T]
  l.map(a.add(_))
  a
 }

Depuis Scala 2.12.0 JavaConversions a été dépréciée.

Donc, la solution la plus simple pour moi était:

java.util.Arrays.asList("a","b","c")
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top