在Scala中展平嵌套的Java列表

时间:2015-04-21 10:02:50

标签: scala scala-java-interop

我在Scala中使用java库。其中一个库返回列表列表。我想要压扁清单。

示例:

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

parentList.asScala.flatten // error

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

您还需要转换内部List[Int]

parentList.asScala.flatMap(_.asScala)

答案 2 :(得分:1)

试试这个

import scala.collection.convert.wrapAsScala._
parentList.toSeq.map(_.toSeq).flatten

这样就可以了。