【问题标题】:Is there a way to combine multiple FileFilters?有没有办法组合多个 FileFilters?
【发布时间】:2018-02-02 05:54:42
【问题描述】:

有没有办法合并java.io的多个FileFilters?

    FileFilter wildcardFileFilter = new WildcardFileFilter("*.yml");
    FileFilter isFileFileFilter = FileFileFilter.FILE;

    File[] listFiles = dir.listFiles(???);

【问题讨论】:

    标签: java java-io apache-commons-io filefilter


    【解决方案1】:

    怎么样……

    FileFilter combinedFilter = f -> wildcardFileFilter.accept(f) && isFileFileFilter.accept(f);
    

    如果你希望它流畅,请记住FileFilter 本质上是Predicate<File>,它提供了一些组合内容的方法...

    Predicate<File> wildcardFileFilter = new WildcardFileFilter("*.jml")::accept;
    Predicate<File> isFileFileFilter = FileFileFilter.FILE::accept;
    
    FileFilter combinedFilter = wildcardFileFilter.and(isFileFileFilter)::test;
    

    【讨论】:

    • 似乎可行,但我正在考虑更优雅的流利构建器解决方案或类似的解决方案(如果存在)。
    • 添加了一个,但老实说,我不明白这一点。你当然可以为 FileFilter 创建类似的东西,但是为什么呢?扩展接口以添加一些流畅的默认方法会很容易,例如MyFileFilter.and(...),但我怀疑它会增加很多清晰度。
    • 谢谢,它很聪明,帮了很多忙,我也在等待其他答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 2013-08-29
    • 2023-03-15
    • 2019-06-17
    相关资源
    最近更新 更多