¿Cómo convertir Scala scala.List
en Java java.util.List
?
¿Cómo convertir Scala scala.List
en Java java.util.List
?
Respuestas:
Scala List y Java List son dos bestias diferentes, porque el primero es inmutable y el segundo es mutable. Entonces, para pasar de uno a otro, primero debe convertir la Scala List en una colección mutable.
En Scala 2.7:
import scala.collection.jcl.Conversions.unconvertList
import scala.collection.jcl.ArrayList
unconvertList(new ArrayList ++ List(1,2,3))
Desde Scala 2.8 en adelante:
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): _*)
Sin embargo, asList
en ese ejemplo no es necesario si el tipo esperado es un Java List
, ya que la conversión es implícita, como lo demuestra la última línea.
scala.collection.JavaConverters
desde las 2.12 en adelante
No estoy seguro de por qué no se ha mencionado esto antes, pero creo que la forma más intuitiva es invocar el asJava
método decorador de JavaConverters directamente en la lista de 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]
Suponiendo que tengamos lo siguiente List
:
scala> val scalaList = List(1,2,3)
scalaList: List[Int] = List(1, 2, 3)
Si quiere ser explícito y decir exactamente lo que quiere convertir:
scala> import scala.collection.JavaConverters._
import scala.collection.JavaConverters._
scala> scalaList.asJava
res11: java.util.List[Int] = [1, 2, 3]
Si no desea controlar las conversiones y dejar que el compilador haga un trabajo implícito por usted:
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]
Depende de usted cómo desea controlar su código.
A partir Scala 2.13
, el paquete scala.jdk.CollectionConverters
proporciona a asJava
través de un proxeneta Seq
y reemplaza paquetes 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]
Preguntas bastante antiguas, aunque las responderé, pero la mayoría de las sugerencias están en desuso.
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
Actualizar
con scala 2.9.2:
import scala.collection.JavaConversions._
import scala.collection.mutable.ListBuffer
val x: java.util.List[Int] = ListBuffer( List( 1, 2, 3 ): _* )
resultado
[1, 2, 3]
Desde Scala 2.12.0 JavaConversions ha quedado obsoleto.
Entonces, la solución más simple para mí fue:
java.util.Arrays.asList("a","b","c")
import scala.collection.JavaConverters._
para 2.12.4