JAVAとSCALAの集合間の相互変換

1645 ワード

scalaではjavaのメソッドを呼び出し、通常は対応するパラメータを渡す必要があります.次はscalaとjavaの相互変換対応テーブルです
Iterator <=> java.util.Iterator
Iterator <=> java.util.Enumeration
Iterable <=> java.lang.Iterable
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

scalaとjavaの相互回転
    import collection.JavaConverters._
    import collection.mutable._
    val map = Map("k" -> "v")
    //   java
    val javaMap = map.asJava
    //    scala
    javaMap.asScala

注意:Scalaの内部では、これらの変換は一連の「パッケージ」オブジェクトによって行われます.これらのオブジェクトは、対応するメソッド呼び出しを最下位のコンテナオブジェクトに転送します.だからコンテナはJavaとScalaの間でコピーしてコピーしません.1つの注目すべき特性は、Javaコンテナを対応するScalaコンテナに変換し、同じJavaコンテナに変換すると、最初と全く同じコンテナオブジェクトが得られることです.(注:ここでは同じ意味で、この2つのオブジェクトは実際には同じメモリ領域への参照であり、コンテナ変換中にコピーは発生しません)
いくつかのScalaコンテナタイプは対応するJavaタイプに変換できますが、対応するJavaタイプをScalaタイプに変換する能力はありません.
Seq => java.util.List
mutable.Seq => java.util.List
Set => java.util.Set
Map => java.util.Map

Javaは可変コンテナ可変コンテナタイプを区別していないため、scala.immutable.Listをjava.util.Listに変換できますが、すべての修正操作で「U n s p p p p p p p o rtedOperationException」が投げ出されます
scala> jul = List(1, 2, 3).asJava
jul: java.util.List[Int] = [1, 2, 3]
scala> jul.add(7)
java.lang.UnsupportedOperationException
        at java.util.AbstractList.add(AbstractList.java:131)

変換元:https://docs.scala-lang.org/zh-cn/overviews/collections/conversions-between-java-and-scala-collections.html