どのように変換するにはスカラ.リストには、java.util.リスト?
-
19-09-2019 - |
質問
どのように変換すScalaの scala.List
Javaの java.util.List
?
解決
スカラリストとJavaリストは、二つの異なる獣です。だから、1から別のものに取得するには、まず、可変コレクションに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): _*)
最後の行によって示されるように、変換は、暗黙であるとして期待型は、Java(登録商標)asList
である場合は、その例でList
は不要である。
他のヒント
いこなして前述したいと思うのは直感的にはを呼び出す 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]
<時間>
あなたはがの共同制御の変換をしたいし、あなたのためのコンパイラmakeはを暗黙のの仕事させてくださいます:
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]
それはあなたのコードを制御したいかはあなた次第です。
かなり古い質問、与えられたが、提案のほとんどが推奨されていません。
import scala.collection.JavaConversions.seqAsJavaList
val myList = List("a", "b", "c")
val myListAsJavaList = seqAsJavaList[String](myList)
更新
とscala2.9.2:
import scala.collection.JavaConversions._
import scala.collection.mutable.ListBuffer
val x: java.util.List[Int] = ListBuffer( List( 1, 2, 3 ): _* )
結果
[1, 2, 3]
開始Scala 2.13
、パッケージ<のhref = "https://www.scala-lang.org/files/archive/api/2.13.x/scala/jdk/CollectionConverters$.html" のrel = "nofollowをnoreferrer" > scala.jdk.CollectionConverters
では<のhref = "https://www.scala-lang.org/files/archive/api/2.13.x/scala/collection/convert/AsJavaExtensions$SeqHasAsJava.html#asJava:javaを提供します。 util.List [A]」のrel = "nofollowをnoreferrer"> 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]
単一呼び出しの場合、手でそれを行うことは、最も簡単な解決策になるかもしれません
val slist = List (1, 2, 3, 4)
val jl = new java.util.ArrayList [Integer] (slist.size)
slist.foreach (jl.add (_))
私は、パフォーマンスを測定しませんでした。
ちょうどやって。 私が見つけた唯一の作業溶液はこれです:
def toJList[T](l:List[T]):util.List[T] = {
val a = new util.ArrayList[T]
l.map(a.add(_))
a
}