当前位置: 首页 > 知识库问答 >
问题:

动态滤波器链接Java8

井通
2023-03-14

我有一个代码就像

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();
        }
    }

到目前为止,我还有各种其他方法,它们与上面的方法相同,只是过滤器不同。有些方法具有附加过滤器,有些方法具有不同的过滤器或没有过滤器。

我是否可能创建条件所需的过滤器集合并动态传递。并且集合中的所有过滤器都应用于流。我不想硬编码正在应用的过滤器列表。我想让它基于配置。我如何做到这一点?

共有2个答案

谯阳伯
2023-03-14

这个怎么样?

private void processFiles(List<Predicate<Path>> filterList) {
    Predicate<Path> compositeFilter=filterList.stream().reduce(w -> true, Predicate::and);
    try {
        Files.walk(Paths.get(Configurations.SOURCE_PATH))
             .filter(compositeFilter)
             .forEach(path -> {
                        new FileProcessorFactory().getFileProcessor(
                                path).process(path);
                    });

    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
}
燕翔飞
2023-03-14

您可以只使用< code>Files.find():

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

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

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

另请参阅BiPredicateBasicFile属性的javadoc;特别是,BiPredicate有一个. and()方法,您会发现它在您的情况下很有用。

 类似资料:
  • 我正在构建API。我在弹性搜索中有身份证,名字,价格。客户机为我提供输入json和要应用的过滤器。 输入1:下面用户正在筛选ID=1(整数)的记录 输入2:用户正在查询带有city=tokyo的记录 用于处理输入和查询到弹性搜索的Java代码 对于过滤器中接收的每个键,我都在检查输入值的数据类型。 我想支持所有的专栏。我想要一个通用的解决方案,而不检查输入数据类型。 输入3: 在不对每个字段及其数

  • 静态链接方法:静态链接的时候,载入代码就会把程序会用到的动态代码或动态代码的地址确定下来 静态库的链接可以使用静态链接,动态链接库也可以使用这种方法链接导入库 动态链接方法:使用这种方式的程序并不在一开始就完成动态链接,而是直到真正调用动态库代码时,载入程序才计算(被调用的那部分)动态代码的逻辑地址,然后等到某个时候,程序又需要调用另外某块动态代码时,载入程序又去计算这部分代码的逻辑地址,所以,这

  • 在编译Linux程序时,我们经常会看到动态链接和静态链接这两个术语。这两个术语中是我Linux的共享函数库(shared libraries)相关的。共享函数库就象Windows系统里的.dll文件,它里面包含有很多程序常用的函数。为了方便程序开发和减少程序的冗余,程序当中就不用包含每个常用函数的拷贝,只是在需要时调用系统中共享函数库中常函数功能即可。这种方式我们称之为动态链接(Dynamical

  • 动态链接库(也称为DLL)是Microsoft Windows最重要的组成要素之一。大多数与Windows相关的磁盘文件如果不是程序模块,就是动态链接程序。迄今为止,我们都是在开发Windows应用程序;现在是尝试编写动态链接库的时候了。许多您已经学会的编写应用程序的规则同样适用于编写这些动态链接库模块,但也有一些重要的不同。 动态链接库的基本知识 正如前面所看到的,Windows应用程序是一个可

  • 问题内容: 是否可以为链接服务器构造一个动态查询(如果可以的话)? 例如: 问题答案: 例子 确保阅读《动态SQL的诅咒和祝福》以防止SQL注入

  • 问题内容: 我刚刚开始使用SQLAlchemy。我决定使用它,因为我在sqlite查询中间使用了很多字符串表达式。 所以,这就是我的问题。我的桌子上有很多设备,每个设备都有维护级别的日期。关键是用户可以选择他想在屏幕上看到的维护级别。因此,我应该为他选择的每种维护级别组合“调整”我的SQLAlchemmy。 例如,在原始SQLite中。 SELECT * WHERE(设备IN [])和m_leve