在 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)
这样就可以了。
我在 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)
这样就可以了。