2017-06-13 41 views
1

我正在使用需要ArrayList作为参数的Java API。现在在Scala中,我有一个List [String]。我如何将List [String]转换为Scala中的ArrayList?如何将Scala列表转换为Java 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 [字符串] = [A,B,C]

+0

ArrayList的''是在执行Java列表''的。有意义的是返回'List '。 – prayagupd

+1

列表是代表任何列表的接口类型,因此它是大多数人用作参数而不是特定实例的接口类型。在没有特定评论的情况下,特别是像ArrayList这样的特定实例,至少应该记录在案,并有充分的理由。 – midor

回答

3

它完全有意义的返回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 
+0

我试过了,val input = List(“a”,“b”,“c”); myapi(new java.util.ArrayList [String](input.asJava));但得到“价值asjava不是List [String]的成员”。 – derek

+0

你导入了'import scala.collection.JavaConverters._',那'asJava'方法是 – prayagupd

相关问题