【问题标题】:How to use ` Files.walk` and early termination如何使用`Files.walk`和提前终止
【发布时间】:2020-07-15 08:20:02
【问题描述】:

我有一段类似这样的代码

Optional<Path> confFile = Files.walk(Paths.get("./")) // traverse and visit ...
              .filter(p -> p.getFileName().endsWith("configuration.properties")) // search config file

我希望流在找到任何此类文件后立即结束,并且在遍历所有子文件夹之前不要继续。

有没有办法做到这一点?

【问题讨论】:

    标签: java performance file navigation


    【解决方案1】:

    是的,它叫findFirst

    Optional<Path> confFile = Files.walk(Paths.get("./"))
                                .filter(p -> p.getFileName().endsWith("configuration.properties"))
                                .findFirst()
    

    来自docs

    返回一个描述此流的第一个元素的 Optional,如果流为空,则返回一个空的 Optional。如果流没有遇到顺序,则可以返回任何元素。

    这是一个短路终端操作。

    “短路”是指:

    如果终端操作在无限输入时可能在有限时间内终止,则它是短路的。

    请注意,filter 不是短路并不重要,因为filter 是惰性的,所以它只会处理findFirst 需要的尽可能多的路径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-03
      • 1970-01-01
      • 2017-10-15
      • 2020-01-22
      • 2018-09-10
      • 1970-01-01
      • 2017-11-27
      • 1970-01-01
      相关资源
      最近更新 更多