java - 如何使用`Files.walk`和提前终止
问题描述
我有一段类似的代码
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()
从文档:
返回一个描述此流的第一个元素的 Optional,如果流为空,则返回一个空的 Optional。如果流没有遇到顺序,则可以返回任何元素。
这是一个短路端子操作。
“短路”是指:
如果一个终端操作在有无限输入时可能会在有限时间内终止,那么它就是短路的。
请注意,不filter
短路并不重要,因为filter
它是惰性的,因此它只会处理findFirst
所需数量的路径。
推荐阅读
- javascript - AJAX 没有收到来自后端的响应,在本地主机上工作但在部署的服务器上不工作?
- android - 我的 android 设备未在命令提示符的 adb devices 下列出
- powerbi - 取消两次虚假预订交易并计算两次交易之间的日期差异
- rest - 连接到 Confluent Cloud - curl: (52) 来自服务器的空回复
- python - 在列表中使用 distinct() 函数。不同的功能在列表中不起作用
- c# - C# 不会编译
- java - TabLayout OnPageChangeListener 不能应用于“()”
- php - cURL 在一个请求后继续运行而不是停止
- bash - 一个脚本中的多个自动完成功能
- r - 从 R 中的公式对象中删除“公式”类