স্কালাকে scala.Listজাভাতে রূপান্তর করবেন কীভাবে java.util.List?
স্কালাকে scala.Listজাভাতে রূপান্তর করবেন কীভাবে java.util.List?
উত্তর:
স্কালার তালিকা এবং জাভা তালিকা দুটি পৃথক জন্তু, কারণ পূর্ববর্তীটি অপরিবর্তনীয় এবং পরেরটি পরিবর্তনীয়। সুতরাং, অন্য থেকে অন্য পেতে, আপনাকে প্রথমে স্কালাল তালিকাটি একটি পরিবর্তনীয় সংগ্রহের মধ্যে রূপান্তর করতে হবে।
স্কেল ২.7 এ:
import scala.collection.jcl.Conversions.unconvertList
import scala.collection.jcl.ArrayList
unconvertList(new ArrayList ++ List(1,2,3))
স্কেলা ২.৮ থেকে
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হিসাবে প্রত্যাশিত ধরণেরটি প্রয়োজনীয় নয় কারণ রূপান্তরটি অন্তর্নিহিত, যেমন শেষ লাইনের দ্বারা প্রদর্শিত demonst
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সরবরাহ করে এবং প্যাকেজগুলি প্রতিস্থাপন করে :asJavaSeqscala.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
হালনাগাদ
স্কেল ২.৯.২ সহ:
import scala.collection.JavaConversions._
import scala.collection.mutable.ListBuffer
val x: java.util.List[Int] = ListBuffer( List( 1, 2, 3 ): _* )
ফলাফল
[1, 2, 3]
একক অনুরোধের জন্য, এটি হাতে হাতে করা সহজ সমাধান হতে পারে:
val slist = List (1, 2, 3, 4)
val jl = new java.util.ArrayList [Integer] (slist.size)
slist.foreach (jl.add (_))
আমি পারফরম্যান্স পরিমাপ করিনি।
যেহেতু স্কেলা 2.12.0 ২.১২.০ জাভা কনভার্সনগুলি করা হয়েছে।
সুতরাং আমার জন্য সহজ সমাধানটি ছিল:
java.util.Arrays.asList("a","b","c")
import scala.collection.JavaConverters._অবমূল্যায়ন সত্য, ২.১২.৪ আছে