首页 文章

如何将Scala List转换为Java ArrayList

提问于
浏览
2

我使用的是需要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 [String]

代替

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

1 回答

  • 4

    返回 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]
    

    In my opinion it needs to be converted to ArrayList[T] or LinkedList[T] whatever you want by yourself.

    我能想到的一种方法是

    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]
    

    Better version of this would be

    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]
    

    And the best version would be, write implicit method

    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
    

相关问题