Scala scala.List
को Java में कैसे कन्वर्ट करेंjava.util.List
?
Scala scala.List
को Java में कैसे कन्वर्ट करेंjava.util.List
?
जवाबों:
स्केल सूची और जावा सूची दो अलग-अलग जानवर हैं, क्योंकि पूर्व अपरिवर्तनीय है और बाद वाला परिवर्तनशील है। इसलिए, एक से दूसरे में जाने के लिए, आपको पहले स्काला सूची को एक परिवर्तनशील संग्रह में बदलना होगा।
स्केल 2.7 पर:
import scala.collection.jcl.Conversions.unconvertList
import scala.collection.jcl.ArrayList
unconvertList(new ArrayList ++ List(1,2,3))
स्केल 2.8 से आगे:
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): _*)
हालांकि, asList
उस उदाहरण में आवश्यक नहीं है यदि अपेक्षित List
रूप से जावा एक है , क्योंकि रूपांतरण अंतर्निहित है, जैसा कि अंतिम पंक्ति द्वारा दर्शाया गया है।
scala.collection.JavaConverters
२.१२ से
यह सुनिश्चित नहीं है कि इसका उल्लेख पहले क्यों नहीं किया गया है, लेकिन मुझे लगता है कि सबसे सहज तरीका यह है कि जावा सूची के asJava
डेकोरेटर विधि को सीधे स्कैला सूची में शामिल किया जाए:
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]
यह मानते हुए कि हमारे पास निम्नलिखित हैं List
:
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]
यदि आप सह नियंत्रण रूपांतरण नहीं चाहते हैं और संकलक आपके लिए निहित कार्य करते हैं:
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]
यह आपके ऊपर है कि आप अपने कोड को कैसे नियंत्रित करना चाहते हैं।
शुरू Scala 2.13
, पैकेज scala.jdk.CollectionConverters
प्रदान करता है 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]
बहुत पुराने सवाल, हालांकि मैं जवाब दूंगा, दिया गया है लेकिन अधिकांश सुझावों को हटा दिया गया है।
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
एकल आह्वान के लिए, इसे हाथ से करना सबसे सरल उपाय हो सकता है:
val slist = List (1, 2, 3, 4)
val jl = new java.util.ArrayList [Integer] (slist.size)
slist.foreach (jl.add (_))
मैंने प्रदर्शन को नहीं मापा।
चूंकि Scala 2.12.0 JavaConversions को हटा दिया गया है।
तो मेरे लिए सबसे सरल उपाय था:
java.util.Arrays.asList("a","b","c")
import scala.collection.JavaConverters._
पदावनति सत्य है, २.१२.४ के लिए है