擅长:python、mysql、java
<p>下面是在Scala中实现这一点的另一种方法(再次使用Streams):</p>
<pre><code> def recursiveListFiles(f: File, matcher: (File) => Boolean): Stream[File] = {
val filesList = f.listFiles()
val files = (
if (f.listFiles == null) Array[File]()
else filesList
).toStream
val (allDirs, allFiles) = files.partition(_.isDirectory)
allFiles.filter(matcher(_)) ++
allDirs.flatMap{ d =>
recursiveListFiles(d, matcher)
}
}
def main(args: Array[String]): Unit = {
val allFiles = recursiveListFiles(
new File("/usr/share"),
((f: File) => f.getName.endsWith(".png"))) foreach println
}
</code></pre>