如何根据以前的过滤结果简化流搜索?

亚瑟

如何根据以前的过滤结果简化流搜索?

   HashMap<Boolean, List<Path>> result = (HashMap<Boolean, List<Path>>) Files.walk(Paths.get(folder)).map(Path
            ::toAbsolutePath).collect(Collectors.groupingBy(Files::isSymbolicLink));
    result.get(true).stream().filter(path -> {
        try {
            return !result.get(false).contains(Files.readSymbolicLink(path));
        } catch (IOException e) {
            throw Throwables.propagate(e);
        }
    }).forEach(symbolicLink -> {
        try {
            result.get(false).addAll(Files.walk(symbolicLink, FileVisitOption.FOLLOW_LINKS).collect(Collectors
                    .toList()));
        } catch (IOException e) {
            throw Throwables.propagate(e);
        }
    });

    return result.get(false).stream().filter(Files::isRegularFile).distinct().collect(Collectors.toList());
解释

您可以通过将一些代码提取到方法中并避免使用来进行整理HashMap

HashMap您可以将文件存储在而不是中Set<Path>这将强制执行唯一性,因此您实际上无需费心检查符号链接是否指向您已经拥有的文件,并且可以删除一些过滤:

public Set<Path> getAllFiles(final String folder) throws IOException {
    return Files.walk(Paths.get(folder))
            .map(Path::toAbsolutePath)
            .flatMap(this::getAllFiles)
            .collect(Collectors.toSet());
}

private Stream<Path> getAllFiles(final Path path) {
    if(!Files.isSymbolicLink(path)) return Stream.of(path);
    try {
        return Files.walk(path, FileVisitOption.FOLLOW_LINKS)
                .filter(Files::isRegularFile);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return Stream.empty();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何根据以前的连续行过滤出行?

如何过滤搜索结果?

如何根据以前下载的信息获取图像列表?

如何根据以前的值更新MongoDB文档?

如何隐藏ngFor的div并根据以前的ngFor显示

如何使ValidateSet根据以前的参数显示不同的数据

如何根据以前的值显示选中的单选按钮?

Spring Webflux:如何比较两个 Mono 流的结果并根据过滤器保存

如何根据以下条件排序查询结果?

IntelliJ:如何在以前的搜索结果中进行搜索

如何通过以前的xpath搜索结果执行lxml xpath搜索?

新搜索后如何清除以前的搜索结果?

根据以前的记录更新列

根据以前的评分创建顺序排名

根据以前的 ID 获取记录 - Laravel

根据模型中的关系数据过滤搜索结果

使用Tweepy收听流和搜索推文。如何停止以前的搜索并仅收听新的流?

如何根据条件过滤JSON数组结果?

如何根据WRITETIME过滤Cassandra结果

如何根据字段值过滤ElasticSearch结果?

如何根据lucene搜索结果查询lucene?

如何根据以前的值将当前级别的值设置为零

如何根据以前的状态在熊猫数据框中创建一列?

如何根据以前和将来的值填充缺失或空值?

我如何根据以前的答案呈现下一个问题

如何根据以前的日期以编程方式对 R 中的日期进行子集化?

如何根据以前的类别在熊猫数据框中创建一个新类别?

如何根据其他/以前的groupby结果运行groupby?

过滤搜索结果