gpt4 book ai didi

java - 动态过滤器链接 Java 8

转载 作者:行者123 更新时间:2023-11-29 06:55:54 25 4
gpt4 key购买 nike

我有这样的代码

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

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

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

最佳答案

你可以只使用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);
}
}

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

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

关于java - 动态过滤器链接 Java 8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34370617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com