【问题标题】:Flattening nested java lists in Scala在 Scala 中展平嵌套的 Java 列表
【发布时间】:2015-04-21 10:02:49
【问题描述】:

我正在使用 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 转换器,但仍然遇到错误。

【问题讨论】:

    标签: scala scala-java-interop


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      还需要转换内List[Int]

      parentList.asScala.flatMap(_.asScala)
      

      【讨论】:

        【解决方案3】:

        这样试试

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

        这样就可以了。

        【讨论】:

          最近更新 更多