【问题标题】:How to convert Scala List to Java ArrayList如何将 Scala 列表转换为 Java ArrayList
【发布时间】:2017-11-15 21:54:36
【问题描述】:

我正在使用需要 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[字符串]

而不是

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

【问题讨论】:

  • ArrayList<T>List<T> 在 Java 中的实现。返回List<T>是有意义的。
  • List 是代表任何列表的接口类型,因此大多数人将其作为参数而不是特定实例。采用没有具体评论的具体实例,特别是像 ArrayList 这样的实例,至少应该有充分的理由记录在案。

标签: java scala scala-java-interop


【解决方案1】:

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

【讨论】:

  • 我试过了,val input = List("a","b","c"); myapi(new java.util.ArrayList [String](input.asJava));但是得到“value asjava 不是 List[String] 的成员”。
  • 你导入import scala.collection.JavaConverters._了吗,asJava方法在哪里
  • scala.collection.JavaConverters 自 Scala 2.13.0 以来已被弃用。您应该使用import scala.jdk.CollectionConverters._ 导入扩展方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-23
  • 2011-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-23
  • 1970-01-01
相关资源
最近更新 更多