我正在做一个示例程序:从文件列表中添加文件名列表。但是我在添加后会得到一个空列表。
我的代码是:
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))
}
最后一个语句没有在控制台中显示任何内容。
答案 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