在 Scala 中展平嵌套 java 列表

Flattening nested java lists in Scala

我在 Scala 中使用 java 个库。其中一个库 returns 列表列表。我想展平列表。

示例:

import scala.collection.JavaConverters._
var parentList : util.List[util.List[Int]] = null
parentList = new util.ArrayList[util.List[Int]]

parentList.asScala.flatten // error

我已经使用了 asScala 转换器,但我仍然遇到错误。

你还需要转换内层List[Int]:

parentList.asScala.flatMap(_.asScala)

您需要在每个内部列表上调用 .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()

这样试试

import scala.jdk.CollectionConverters._
parentList.asScala.flatMap.map(_.toSeq)

这样就可以了。