Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不添加元素的Scala列表_Scala - Fatal编程技术网

不添加元素的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