126

Scalascala.ListをJavaに変換する方法はjava.util.List

4

9 に答える 9

179

これが以前に言及されていない理由はわかりませんが、最も直感的な方法は、ScalaリストでJavaConvertersasJavaのデコレータメソッドを直接呼び出すことだと思います。

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]
于 2013-12-29T00:14:55.267 に答える
69

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

于 2010-03-12T04:30:08.600 に答える
25

以前の回答を要約するには

次のものがあると仮定します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]

コードをどのように制御するかはあなた次第です。

于 2014-11-28T12:01:59.617 に答える
14

を開始Scala 2.13すると、パッケージはパッケージのポン引きを介してscala.jdk.CollectionConverters提供し、パッケージを置き換えます。asJavaSeqscala.collection.JavaConverters/JavaConversions

import scala.jdk.CollectionConverters._

// val scalaList: List[Int] = List(1, 2, 3)
scalaList.asJava
// java.util.List[Int] = [1, 2, 3]
于 2019-03-31T20:01:33.720 に答える
7

かなり古い質問ですが、私は答えますが、ほとんどの提案は非推奨です。

import scala.collection.JavaConversions.seqAsJavaList

val myList = List("a", "b", "c")
val myListAsJavaList = seqAsJavaList[String](myList)
于 2017-01-20T00:31:46.967 に答える
5

アップデート

Scala 2.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]
于 2012-07-15T03:18:31.433 に答える
1

単一の呼び出しの場合、手動で行うのが最も簡単な解決策かもしれません。

val slist = List (1, 2, 3, 4)          
val jl = new java.util.ArrayList [Integer] (slist.size)
slist.foreach (jl.add (_))   

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

于 2010-03-12T13:53:08.430 に答える
0

上で提案したように実行するだけで、Java側でも不変のリストが生成されます。私が見つけた唯一の実用的な解決策はこれです:

def toJList[T](l:List[T]):util.List[T] = {
  val a = new util.ArrayList[T]
  l.map(a.add(_))
  a
 }
于 2013-05-08T12:51:34.330 に答える
0

Scala 2.12.0以降、JavaConversionsは非推奨になりました。

だから私にとって最も簡単な解決策は:

java.util.Arrays.asList("a","b","c")
于 2017-06-01T13:48:37.720 に答える