不添加元素的Scala列表
我正在做一个示例程序:从文件列表中添加文件名列表。但我在添加后得到一个空列表 我的代码是:不添加元素的Scala列表,scala,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:
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))
}
最后一条语句在控制台中没有显示任何内容。
f.getName::leftFileNames
表示将f.getName
添加到leftFileNames
的开头,并返回一个新的列表
,因此它不会添加到leftFileNames
中。因此,对于您的示例,您需要在每次操作后分配leftFileNames
,如:
leftFiles.foreach((f:File) => leftFileNames = f.getName :: leftFileNames)
但是最好不要在Scala中使用可变变量,这会导致副作用,您可以使用映射
和反向
进行此操作,如:
val leftFileNames = leftFiles.map(_.getName).reverse