如何将Scala List转换为Java ArrayList

时间:2017-06-13 23:19:31

标签: java scala scala-java-interop

我使用的是需要ArrayList作为参数的Java API。现在在Scala中,我有一个List [String]。如何在Scala中将List [String]转换为ArrayList?

我试过了:

import scala.collection.JavaConverters._
val scalaList = List("a","b","c")
scalaList.asJava

结果是:

java.util.List[String] = [a, b, c]

上述方法无效,因为我希望结果为

  

的java.util.ArrayList [字符串]

而不是

  

java.util.List [String] = [a,b,c]

1 个答案:

答案 0 :(得分:5)

返回java.util.List[T]这是一个java接口并且可以ArrayList[T]LinkedList[T]作为实现,这是完全有意义的。

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
res22: java.util.List[Int] = [1, 2, 3]

在我看来,无论您想要什么,都需要将其转换为ArrayList[T]LinkedList[T]

我能想到的一种方式是

scala> new java.util.ArrayList[Int](scalaList.asJava)
res27: java.util.ArrayList[Int] = [1, 2, 3]

scala> new java.util.LinkedList[Int](scalaList.asJava)
res28: java.util.LinkedList[Int] = [1, 2, 3]

更好的版本

scala> def toArrayList[T](input: List[T]): java.util.ArrayList[T] = new java.util.ArrayList[T](input.asJava)
toArrayList: [T](input: List[T])java.util.ArrayList[T]

scala> toArrayList(List(1000, 2000, 3000))
res33: java.util.ArrayList[Int] = [1000, 2000, 3000]

最好的版本是,写隐式方法

class AsArrayList[T](input: List[T]) {
  def asArrayList : java.util.ArrayList[T] = new java.util.ArrayList[T](input.asJava)
}

implicit def asArrayList[T](input: List[T]) = new AsArrayList[T](input)

List(1000, 2000, 3000).asArrayList