खोज…


जावा कलेक्शन और इसके विपरीत स्कैला कलेक्शन को बदलना

जब आपको एक जावा विधि में एक संग्रह पास करने की आवश्यकता होती है:

import scala.collection.JavaConverters._

val scalaList = List(1, 2, 3)
JavaLibrary.process(scalaList.asJava)

यदि जावा कोड जावा संग्रह लौटाता है, तो आप इसे एक समान तरीके से स्काला संग्रह में बदल सकते हैं:

import scala.collection.JavaConverters._

val javaCollection = JavaLibrary.getList
val scalaCollection = javaCollection.asScala

ध्यान दें कि ये डेकोरेटर हैं, इसलिए वे केवल एक स्केला या जावा संग्रह इंटरफ़ेस में अंतर्निहित संग्रह को लपेटते हैं। इसलिए, कॉल .asJava और .asScala संग्रह की प्रतिलिपि नहीं बनाते हैं।

Arrays

Arrays नियमित रूप से JVM सरणियाँ हैं जिन्हें एक मोड़ के साथ माना जाता है कि उन्हें अपरिवर्तनीय माना जाता है और उनके पास विशेष निर्माता और निहित रूपांतरण हैं। new कीवर्ड के बिना उनका निर्माण करें।

 val a = Array("element")

अब a प्रकार का Array[String]

 val acs: Array[CharSequence] = a
 //Error: type mismatch;  found   : Array[String]  required: Array[CharSequence]

हालाँकि String , CharSequence लिए परिवर्तनीय है, Array[String] Array[CharSequence] लिए परिवर्तनीय नहीं है Array[CharSequence]

आप एक का उपयोग कर सकते Array अन्य संग्रह, के लिए एक अंतर्निहित रूपांतरण करने के लिए धन्यवाद की तरह TraversableLike ArrayOps :

 val b: Array[Int] = a.map(_.length)

स्काला संग्रह (के अधिकांश TraversableOnce ) एक है toArray विधि एक अंतर्निहित लेने ClassTag परिणाम सरणी के निर्माण के लिए:

 List(0).toArray
 //> res1: Array[Int] = Array(0)

इससे आपके Scala कोड में किसी भी TraversableOnce का उपयोग करना आसान हो जाता है और फिर इसे Java कोड में पास कर दिया जाता है जो किसी सरणी की अपेक्षा करता है।

स्केल और जावा प्रकार रूपांतरण

Scala JavaConverters ऑब्जेक्ट में सभी प्रमुख संग्रह प्रकारों के बीच निहित रूपांतरण प्रदान करता है।

निम्नलिखित प्रकार के रूपांतरण द्विदिश हैं।

स्केल प्रकार जावा प्रकार
इटरेटर java.util.Iterator
इटरेटर java.util.Enumeration
इटरेटर java.util.Iterable
इटरेटर java.util.Collection
mutable.Buffer java.util.List
mutable.Set java.util.Set
mutable.Map java.util.Map
mutable.ConcurrentMap java.util.concurrent.ConcurrentMap

कुछ अन्य स्काला संग्रह जावा में भी परिवर्तित किए जा सकते हैं, लेकिन मूल स्काला प्रकार में रूपांतरण नहीं होता है:

स्केल प्रकार जावा प्रकार
seq java.util.List
mutable.Seq java.util.List
सेट java.util.Set
नक्शा java.util.Map

संदर्भ :

जावा और स्काला कलेक्शंस के बीच बातचीत

स्काला फ़ंक्शंस के लिए कार्यात्मक इंटरफेस - स्कैला-जावा 8-कॉमर्स

स्काला के लिए एक जावा 8 संगतता किट।

अधिकांश उदाहरण से नकल कर रहे हैं रीडमी

Scala.FunctionN और java.util.function के बीच कन्वर्टर्स

import java.util.function._
import scala.compat.java8.FunctionConverters._

val foo: Int => Boolean = i => i > 7
def testBig(ip: IntPredicate) = ip.test(9)
println(testBig(foo.asJava))  // Prints true

val bar = new UnaryOperator[String]{ def apply(s: String) = s.reverse }
List("cod", "herring").map(bar.asScala)    // List("doc", "gnirrih")

def testA[A](p: Predicate[A])(a: A) = p.test(a)
println(testA(asJavaPredicate(foo))(4))  // Prints false

Scala.Option और java.util कक्षाओं के बीच कन्वर्टर्स वैकल्पिक, OptionalDouble, OptionalInt, और OptionalLong।

import scala.compat.java8.OptionConverters._

    class Test {
      val o = Option(2.7)
      val oj = o.asJava        // Optional[Double]
      val ojd = o.asPrimitive  // OptionalDouble
      val ojds = ojd.asScala   // Option(2.7) again
    }

स्केल संग्रह से जावा 8 स्ट्रीम में कन्वर्टर्स

import java.util.stream.IntStream

import scala.compat.java8.StreamConverters._
import scala.compat.java8.collectionImpl.{Accumulator, LongAccumulator}


  val m = collection.immutable.HashMap("fish" -> 2, "bird" -> 4)
  val parStream: IntStream = m.parValueStream
  val s: Int = parStream.sum
  // 6, potientially computed in parallel
  val t: List[String] = m.seqKeyStream.toScala[List]
  // List("fish", "bird")
  val a: Accumulator[(String, Int)] = m.accumulate // Accumulator[(String, Int)]

  val n = a.stepper.fold(0)(_ + _._1.length) +
    a.parStream.count // 8 + 2 = 10

  val b: LongAccumulator = java.util.Arrays.stream(Array(2L, 3L, 4L)).accumulate
  // LongAccumulator
  val l: List[Long] = b.to[List] // List(2L, 3L, 4L)


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow