Answers:
Scala List和Java List是两种不同的野兽,因为前者是不可变的,而后者是可变的。因此,要从一个到另一个,您首先必须将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列表上调用JavaConverters的asJava
decorator方法:
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
更新资料
使用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]