当前位置:  开发笔记 > 编程语言 > 正文

动态过滤器链接Java 8

如何解决《动态过滤器链接Java8》经验,为你挑选了1个好方法。

我有一个代码

private void processFiles() {
        try {
            Files.walk(Paths.get(Configurations.SOURCE_PATH))
                    .filter(new NoDestinationPathFilter()) //<--This one
                    .filter(new NoMetaFilesOrDirectories()) //<--and this too
                    .forEach(
                            path -> {
                                new FileProcessorFactory().getFileProcessor(
                                        path).process(path);
                            });
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
    }

截至目前,我有各种其他方法,与上述方法相同,只是在滤波器方面有所不同.有些方法有额外的过滤器,有些方法有不同或没有.

是否有可能创建一个条件所需的过滤器集合并动态传入.并且集合中的所有过滤器都应用于流.我不想对正在应用的过滤器列表进行硬编码.我想让它基于配置.我如何实现这一目标?



1> fge..:

你可以使用Files.find():

private void processFiles(final Path baseDir, final Consumer consumer,
    final Collection> filters)
    throws IOException
{
    final BiPredicate filter = filters.stream()
        .reduce((t, u) -> true, BiPredicate::and);

    try (
        final Stream stream = Files.find(baseDir, Integer.MAX_VALUE, filter);
    ) {
        stream.forEach(consumer);
    }
}

是的,这意味着转换过滤器......

另见javadoc of BiPredicateBasicFileAttributes; 特别是,BiPredicate有一种.and()方法,你会发现在你的情况下有用.

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有