【问题标题】:How to convert a (java) List to a (scala) ListBuffer (not Buffer) in java?如何在java中将(java)List转换为(scala)ListBuffer(不是Buffer)?
【发布时间】:2020-02-14 20:48:29
【问题描述】:

有没有办法将 java.util.List 转换为 Scala.mutable.ListBuffer ?

在 JavaConverter 中,asScalaBufferConverter 返回一个 Buffer,但 scala 项目中的方法只接受 ListBuffer。

有没有办法将列表转换为 ListBuffer ?还是我应该与其他团队库核实,以便他们将其更改为缓冲区或列表?

【问题讨论】:

  • 出于兴趣,为什么库需要ListBuffer?跨 API 传递可变数据结构是灾难的根源。
  • @LuisMiguelMejíaSuárez 添加您的评论作为答案?
  • @Tim 好点,我已经与其他团队谈过将其更改为 List。这可能会解决我的问题。

标签: java scala


【解决方案1】:

由于 Luis 倾向于不发布单行答案作为答案,因此这里的答案略微扩展,因此我可以收获他的支持

Scala 2.12

import scala.collection.JavaConverters._
import scala.collection.mutable.ListBuffer

val jlist = List(1,2,3).asJava
jlist.asScala.to[ListBuffer]   // res0: scala.collection.mutable.ListBuffer[Int] = ListBuffer(1, 2, 3)

Scala 2.13

import scala.jdk.CollectionConverters._
import scala.collection.mutable.ListBuffer

val jlist = List(1,2,3).asJava
jlist.asScala.to(ListBuffer)

注意 Scala 2.13 引入了以下changes

新的to(Collection) 方法

  • 列表替换旧的to[Collection] 方法。
  • 参数是所需集合类型的伴随对象,例如.to(Vector)
  • API 更改支持所有集合类型(包括MapBitSet 等)。

【讨论】:

  • 这似乎适用于命令行,但不适用于 java 代码。 asScalaBufferConverter(content.getList()).asScala().to(ListBuffer$) 或 code.asScalaBufferConverter(content.getList()).asScala().to(ListBuffer) 在 java 代码中给出编译错误。
  • Casting (ListBuffer)asScalaBufferConverter(content.getList()).asScala() 不会给出编译错误,但会在运行时给出类转换 java.lang.ClassCastException: class scala. collection.convert.Wrappers$JListWrapper 不能强制转换为 scala.collection.mutable.ListBuffer 类(scala.collection.convert.Wrappers$JListWrapper 和 scala.collection.mutable.ListBuffer 位于加载器“app”的未命名模块中)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-21
  • 1970-01-01
  • 2017-01-10
  • 2016-08-22
  • 2021-08-08
  • 2019-11-20
  • 2019-11-12
相关资源
最近更新 更多