【问题标题】:Flattening nested java lists in Scala在 Scala 中展平嵌套的 Java 列表
【发布时间】:2015-04-21 10:02:49
【问题描述】:
我正在使用 Java 库在 Scala 中工作。其中一个库返回列表列表。我想展平列表。
例子:
import scala.collection.JavaConverters._
var parentList : util.List[util.List[Int]] = null
parentList = new util.ArrayList[util.List[Int]]
parentList.asScala.flatten // error
我使用了 asScala 转换器,但仍然遇到错误。
【问题讨论】:
标签:
scala
scala-java-interop
【解决方案1】:
您需要在每个内部列表上调用.asScala:
scala> parentList.asScala.map(_.asScala)
res0: scala.collection.mutable.Buffer[scala.collection.mutable.Buffer[Int]] = ArrayBuffer()
scala> parentList.asScala.map(_.asScala).flatten
res1: scala.collection.mutable.Buffer[Int] = ArrayBuffer()
请注意,调用.map 然后.flatten 可以使用.flatMap 一步完成:
scala> parentList.asScala.flatMap(_.asScala)
res2: scala.collection.mutable.Buffer[Int] = ArrayBuffer()
【解决方案2】:
还需要转换内List[Int]:
parentList.asScala.flatMap(_.asScala)
【解决方案3】:
这样试试
import scala.jdk.CollectionConverters._
parentList.asScala.flatMap.map(_.toSeq)
这样就可以了。