2015-04-21 1 views
1

Я работаю в Scala с java-библиотеками. Одна из этих библиотек возвращает список списков. Я хочу сгладить список.Сглаживание вложенных 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 конвертер, но я до сих пор встречая ошибку.

ответ

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 

это будет делать трюк.