简体   繁体   English

如何将Scala List转换为Java ArrayList

[英]How to convert Scala List to Java ArrayList

I am using a Java API that requires ArrayList as parameter. 我使用的是需要ArrayList作为参数的Java API。 Now in Scala, I have a List[String]. 现在在Scala中,我有一个List [String]。 How can I convert the List[String] to ArrayList in Scala? 如何在Scala中将List [String]转换为ArrayList?

I have tried : 我试过了 :

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

Result is: 结果是:

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

The above does not work because I want the result to be 以上不起作用,因为我想要结果

java.util.ArrayList[String] 的java.util.ArrayList [字符串]

instead of 代替

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

It totally makes sense to return java.util.List[T] which is a java interface and can have ArrayList[T] or LinkedList[T] as implementation. 返回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. 在我看来,无论你想要什么,它都需要转换为ArrayList[T]LinkedList[T]

One way I could think of is 我能想到的一种方法是

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

or 要么

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM