考虑一下:
fun readFiles(directory: String): List<File> {
val result = ArrayList<File>()
File(directory).walkTopDown().forEach {
result.addAll(getFiles(it))
}
return result
}
fun getFiles(file: File): List<File> { ... }
如何重写它以便我不需要初始化result
ArrayList
但可以直接return File(directory).walkTopDown().???
?
问题不在于读取文件或任何东西的最佳方式是什么,而在于如何在执行相同操作的同时更简洁地编写上述代码。
您可以flatMap
为此目的使用。它首先Sequence
使用您的映射函数将每个元素映射到 a (所以你有点得到 a Sequence<Sequence<File>>
),然后它将每个结果展平回 a Sequence<File>
。
由于walkTopDown
返回 a FileTreeWalk
(它是 的子类Sequence<File>
),而您返回 a List<File>
,因此您还必须进行一些转换。如果您创建getFiles
并readFiles
返回 a ,则可以删除这些转换Sequence<File>
。
fun readFiles(directory: String): List<File> {
return File(directory)
.walkTopDown()
.flatMap { getFiles(it).asSequence() }
.toList()
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句