Bagaimana cara mengubah Scala scala.List
menjadi Java java.util.List
?
Bagaimana cara mengubah Scala scala.List
menjadi Java java.util.List
?
Jawaban:
Daftar Scala dan Daftar Jawa adalah dua binatang yang berbeda, karena yang pertama tidak dapat diubah dan yang terakhir dapat berubah. Jadi, untuk berpindah dari satu sama lain, Anda harus terlebih dahulu mengubah Daftar Scala menjadi koleksi yang bisa diubah.
Di Scala 2.7:
import scala.collection.jcl.Conversions.unconvertList
import scala.collection.jcl.ArrayList
unconvertList(new ArrayList ++ List(1,2,3))
Dari Scala 2.8 dan seterusnya:
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): _*)
Namun, asList
dalam contoh tersebut tidak diperlukan jika jenis yang diharapkan adalah Java List
, karena konversinya bersifat implisit, seperti yang ditunjukkan oleh baris terakhir.
scala.collection.JavaConverters
dari 2.12 pada
Tidak yakin mengapa ini belum disebutkan sebelumnya, tetapi menurut saya cara yang paling intuitif adalah dengan memanggil asJava
metode dekorator JavaConverters langsung di daftar 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]
Dengan asumsi kami memiliki yang berikut List
:
scala> val scalaList = List(1,2,3)
scalaList: List[Int] = List(1, 2, 3)
Jika Anda ingin lebih eksplisit dan mengatakan dengan tepat apa yang ingin Anda ubah:
scala> import scala.collection.JavaConverters._
import scala.collection.JavaConverters._
scala> scalaList.asJava
res11: java.util.List[Int] = [1, 2, 3]
Jika Anda tidak ingin mengontrol konversi bersama dan membiarkan compiler membuat pekerjaan implisit untuk Anda:
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]
Terserah Anda bagaimana Anda ingin mengontrol kode Anda.
Memulai Scala 2.13
, paket scala.jdk.CollectionConverters
menyediakan asJava
melalui germo Seq
dan mengganti paket 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]
Pertanyaan yang cukup lama, meskipun saya akan menjawab, diberikan tetapi sebagian besar saran sudah usang.
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
Memperbarui
dengan skala 2.9.2:
import scala.collection.JavaConversions._
import scala.collection.mutable.ListBuffer
val x: java.util.List[Int] = ListBuffer( List( 1, 2, 3 ): _* )
hasil
[1, 2, 3]
Sejak Scala 2.12.0 JavaConversions tidak digunakan lagi.
Jadi solusi paling sederhana bagi saya adalah:
java.util.Arrays.asList("a","b","c")
import scala.collection.JavaConverters._
untuk 2.12.4