mport java.io.File
def subdirs(dir: File): Iterator[File] = {
val children = dir.listFiles.filter(_.isDirectory)
children.toIterator ++ children.toIterator.flatMap(subdirs _)
mport java.io.File
def subdirs(dir: File): Iterator[File] = {
val children = dir.listFiles.filter(_.isDirectory)
children.toIterator ++ children.toIterator.flatMap(subdirs _)
children: dir的所有一级子目录
红线那部分代码的值是一个
dir的所有二级及以下子目录
的iterator, 和children连起来就是"所有子目录的iterator"。children.toIterator
: 类型是Iterator[File]
, 是所有一级子目录的iterator{subdirs _}
是个匿名函数,类型是File => Iterator[File]
flatMap的意思是"先map再flat":
先map: 把每个一级子目录(
File
)传给{subdirs _}
,得到若干个相应的Iterator[File]
再flat: 把这些
Iterator[File]
连起来,合并成一个