2015-04-21 88 views
1

我正在使用java库在Scala中工作。其中一个库返回列表的列表。我想扁平化列表。在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

你需要调用.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

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

parentList.asScala.flatMap(_.asScala) 
1

尝试这样

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

这将这样的伎俩。