Scala scala.List
をJava に変換する方法はjava.util.List
?
Scala scala.List
をJava に変換する方法はjava.util.List
?
回答:
ScalaリストとJavaリストは2つの異なる野獣です。前者は不変であり、後者は変更可能だからです。したがって、あるものから別のものに移行するには、まずScalaリストを変更可能なコレクションに変換する必要があります。
Scala 2.7の場合:
import scala.collection.jcl.Conversions.unconvertList
import scala.collection.jcl.ArrayList
unconvertList(new ArrayList ++ List(1,2,3))
Scala 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
予期されるタイプがJavaの場合、その例は必要ありませんList
。
scala.collection.JavaConverters
2.12以降
これが以前に言及されていない理由はわかりませんが、最も直感的な方法は、ScalaリストasJava
でJavaConvertersのデコレータメソッドを直接呼び出すことです。
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