JAVAとSCALAの集合間の相互変換
1645 ワード
scalaではjavaのメソッドを呼び出し、通常は対応するパラメータを渡す必要があります.次はscalaとjavaの相互変換対応テーブルです
scalaとjavaの相互回転
注意:Scalaの内部では、これらの変換は一連の「パッケージ」オブジェクトによって行われます.これらのオブジェクトは、対応するメソッド呼び出しを最下位のコンテナオブジェクトに転送します.だからコンテナはJavaとScalaの間でコピーしてコピーしません.1つの注目すべき特性は、Javaコンテナを対応するScalaコンテナに変換し、同じJavaコンテナに変換すると、最初と全く同じコンテナオブジェクトが得られることです.(注:ここでは同じ意味で、この2つのオブジェクトは実際には同じメモリ領域への参照であり、コンテナ変換中にコピーは発生しません)
いくつかのScalaコンテナタイプは対応するJavaタイプに変換できますが、対応するJavaタイプをScalaタイプに変換する能力はありません.
Javaは可変コンテナ可変コンテナタイプを区別していないため、scala.immutable.Listをjava.util.Listに変換できますが、すべての修正操作で「U n s p p p p p p p o rtedOperationException」が投げ出されます
変換元:https://docs.scala-lang.org/zh-cn/overviews/collections/conversions-between-java-and-scala-collections.html
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