Como converter Scala scala.List
em Java java.util.List
?
Como converter Scala scala.List
em Java java.util.List
?
Respostas:
Scala List e Java List são duas feras diferentes, porque a primeira é imutável e a última é mutável. Portanto, para ir de um para o outro, primeiro você deve converter a Lista Scala em uma coleção mutável.
No Scala 2.7:
import scala.collection.jcl.Conversions.unconvertList
import scala.collection.jcl.ArrayList
unconvertList(new ArrayList ++ List(1,2,3))
Do Scala 2.8 em diante:
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): _*)
Porém, asList
nesse exemplo não é necessário se o tipo esperado for um Java List
, pois a conversão é implícita, conforme demonstrado na última linha.
scala.collection.JavaConverters
2.12 em diante
Não sei por que isso não foi mencionado antes, mas acho que a maneira mais intuitiva é invocar o asJava
método decorator de JavaConverters diretamente na lista 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]
Supondo que temos o seguinte List
:
scala> val scalaList = List(1,2,3)
scalaList: List[Int] = List(1, 2, 3)
Se você quiser ser explícito e dizer exatamente o que deseja converter:
scala> import scala.collection.JavaConverters._
import scala.collection.JavaConverters._
scala> scalaList.asJava
res11: java.util.List[Int] = [1, 2, 3]
Se você não quiser conversões de co-controle e deixe o compilador fazer o trabalho implícito para você:
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 você como deseja controlar seu código.
A partir de Scala 2.13
, o pacote scala.jdk.CollectionConverters
fornece asJava
por meio de um cafetão Seq
e substitui os pacotes 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]
Perguntas muito antigas, embora eu vá responder, mas a maioria das sugestões estão obsoletas.
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
Atualizar
com 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 se tornou obsoleto.
Portanto, a solução mais simples para mim era:
java.util.Arrays.asList("a","b","c")
import scala.collection.JavaConverters._
para 2.12.4