java - 如何将 Scala 列表转换为 Java ArrayList

标签 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[String]

代替

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

最佳答案

返回 java.util.List[T] 是完全有意义的,它是一个 java 接口(interface)并且可以有 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

关于java - 如何将 Scala 列表转换为 Java ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44533033/

相关文章:

scala - Scala- block 不能包含声明

java - 使用文本中的公式/写作文本

java 正则表达式检测\n

scala - Spark : Cannot add RDD elements into a mutable HashMap inside a closure

java - 如何从Elasticsearch读取数据到Spark?

java - 如何序列化 Scala lambda 以实现与 Java 方法的互操作?

java - 从 jUnit 测试调用方法

java - 如何将消息事件数据变量访问到 jbpm5 中的网关约束定义中

Java - 如何将 Scala Stream 转换为 Java Stream?

java - 将 Java 比较器转换为 Scala 排序