Scala列表没有添加元素

时间:2017-08-27 14:46:02

标签: scala

我正在做一个示例程序:从文件列表中添加文件名列表。但是我在添加后会得到一个空列表。

我的代码是:

val regex = """(.*\.pdf$)|(.*\.doc$)""".r
val leftPath = "/Users/ravi/Documents/aa"

val leftFiles = recursiveListFiles(new File(leftPath), regex)
var leftFileNames = List[String]()

leftFiles.foreach((f:File) => {/*println(f.getName);*/ f.getName :: leftFileNames})

leftFileNames.foreach(println)

def recursiveListFiles(f: File, r: Regex): Array[File] = {
  val these = f.listFiles
  val good = these.filter(f => r.findFirstIn(f.getName).isDefined)
  good ++ these.filter(_.isDirectory).flatMap(recursiveListFiles(_, r))
}

最后一个语句没有在控制台中显示任何内容。

1 个答案:

答案 0 :(得分:1)

f.getName :: leftFileNames表示将f.getName添加到leftFileNames的开头并返回新的List,因此不会添加到leftFileNames。因此,对于您的示例,您需要在每次操作后分配leftFileNames,例如:

leftFiles.foreach((f:File) => leftFileNames =  f.getName :: leftFileNames)

但最好不要在 Scala 中使用可变变量,它会导致副作用,您可以使用map使用reverse,例如:

val leftFileNames = leftFiles.map(_.getName).reverse