質問

どのように変換す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"> asJavaSeqの売春斡旋業者を経由してパッケージ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 (_))   

私は、パフォーマンスを測定しませんでした。

でも、Java側で不変のリストを作成する上で提案したように、

ちょうどやって。 私が見つけた唯一の作業溶液はこれです:

def toJList[T](l:List[T]):util.List[T] = {
  val a = new util.ArrayList[T]
  l.map(a.add(_))
  a
 }

スカラ座2.12.0 JavaConversionsされているので非推奨。

だから、私のための最も簡単な解決策だっます:

java.util.Arrays.asList("a","b","c")
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top