Scala'lar scala.List
Java'ya nasıl dönüştürülür java.util.List
?
Scala'lar scala.List
Java'ya nasıl dönüştürülür java.util.List
?
Yanıtlar:
Scala Listesi ve Java Listesi iki farklı canavardır, çünkü birincisi değişmez ve ikincisi değiştirilebilir. Yani, birinden diğerine geçmek için, önce Scala Listesini değiştirilebilir bir koleksiyona dönüştürmeniz gerekir.
Scala 2.7'de:
import scala.collection.jcl.Conversions.unconvertList
import scala.collection.jcl.ArrayList
unconvertList(new ArrayList ++ List(1,2,3))
Scala 2.8'den itibaren:
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): _*)
Ancak, asList
bu örnekte, beklenen tür bir Java List
ise, son satırda gösterildiği gibi dönüştürme örtük olduğundan gerekli değildir .
scala.collection.JavaConverters
üzerinde 2,12
Bundan neden daha önce bahsedilmediğinden emin değilim, ancak bence en sezgisel yol, JavaConverters'ınasJava
dekoratör yöntemini doğrudan Scala listesinde çağırmaktır :
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]
Aşağıdakilere sahip olduğumuzu varsayarsak List
:
scala> val scalaList = List(1,2,3)
scalaList: List[Int] = List(1, 2, 3)
Eğer olmak istiyorsan açık ve tam olarak anlatmak dönüştürmek istediğini:
scala> import scala.collection.JavaConverters._
import scala.collection.JavaConverters._
scala> scalaList.asJava
res11: java.util.List[Int] = [1, 2, 3]
Eğer varsa eş denetim dönüşümleri istemiyoruz ve izin derleyici yapmak örtük sizin için işi:
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]
Kodunuzu nasıl kontrol etmek istediğiniz size kalmış.
Başlangıç olarak Scala 2.13
, paket bir pezevenk yoluyla scala.jdk.CollectionConverters
sağlar ve paketleri değiştirir :asJava
Seq
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]
Oldukça eski sorular, ancak cevap vereceğim, ancak önerilerin çoğu onaylanmadı.
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
Güncelleme
2.9.2 ölçekli:
import scala.collection.JavaConversions._
import scala.collection.mutable.ListBuffer
val x: java.util.List[Int] = ListBuffer( List( 1, 2, 3 ): _* )
sonuç
[1, 2, 3]
Scala 2.12.0'dan beri JavaConversions kullanımdan kaldırılmıştır.
Yani benim için en basit çözüm şuydu:
java.util.Arrays.asList("a","b","c")
import scala.collection.JavaConverters._