2017-06-13 40 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

相關問題