如何使用 `Files.walk` 和提前终止
How to use ` Files.walk` and early termination
我有一段类似的代码
Optional<Path> confFile = Files.walk(Paths.get("./")) // traverse and visit ...
.filter(p -> p.getFileName().endsWith("configuration.properties")) // search config file
我希望流在找到任何此类文件后立即结束,并且在它遍历所有子文件夹之前不要继续。
有办法吗?
是的,它叫做findFirst
:
Optional<Path> confFile = Files.walk(Paths.get("./"))
.filter(p -> p.getFileName().endsWith("configuration.properties"))
.findFirst()
来自docs:
Returns an Optional describing the first element of this stream, or an empty Optional if the stream is empty. If the stream has no encounter order, then any element may be returned.
This is a short-circuiting terminal operation.
“短路”是指:
A terminal operation is short-circuiting if, when presented with infinite input, it may terminate in finite time.
注意filter
没有短路并不重要,因为filter
是惰性的,所以它只会处理findFirst
需要的路径。
我有一段类似的代码
Optional<Path> confFile = Files.walk(Paths.get("./")) // traverse and visit ...
.filter(p -> p.getFileName().endsWith("configuration.properties")) // search config file
我希望流在找到任何此类文件后立即结束,并且在它遍历所有子文件夹之前不要继续。
有办法吗?
是的,它叫做findFirst
:
Optional<Path> confFile = Files.walk(Paths.get("./"))
.filter(p -> p.getFileName().endsWith("configuration.properties"))
.findFirst()
来自docs:
Returns an Optional describing the first element of this stream, or an empty Optional if the stream is empty. If the stream has no encounter order, then any element may be returned.
This is a short-circuiting terminal operation.
“短路”是指:
A terminal operation is short-circuiting if, when presented with infinite input, it may terminate in finite time.
注意filter
没有短路并不重要,因为filter
是惰性的,所以它只会处理findFirst
需要的路径。