首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将WatchService更改为stream api

如何将WatchService更改为stream api
EN

Stack Overflow用户
提问于 2019-02-06 21:30:53
回答 1查看 118关注 0票数 2

我有通过Java中的WatchService监控目录的代码。但目前我使用循环,但我想将其更改为streams。

代码语言:javascript
复制
try {
            WatchService watchService = FileSystems.getDefault().newWatchService();

            Paths.get(dirPath).register(watchService, StandardWatchEventKinds.ENTRY_CREATE);
            WatchKey key;
            while ((key = watchService.take()) != null) {
                for (WatchEvent<?> event : key.pollEvents()) {

                    String fileName = event.context().toString();
                    if (isPdfFile(fileName)) {
                        runOnOption.get(option).accept(dirFilePath);
                        return;
                    }
                }
                key.reset();
            }
        }
        catch (IOException | InterruptedException e) {}
    }

方法isPdfFile检查文件是否为pdf,如果是,它将重命名并创建用于重命名的日志文件。所以我能做的是:

代码语言:javascript
复制
    key.pollEvents()
       .stream()
       .filter(e -> isEdxFile(e.context().toString()))
       .forEach( e -> runOnOption.get(option).accept(dirPath+e.context().toString()));

但是我遗漏的是while循环和return from loop,当它找到带有pdf扩展名的文件时。

EN

回答 1

Stack Overflow用户

发布于 2019-02-06 21:52:30

你可能要找的是

代码语言:javascript
复制
.findFirst() // first element with such a filter condition
.ifPresent(e -> runOnOption.get(option).accept(dirPath+e.context().toString()));

在执行使用者逻辑后,一旦找到这样的元素就返回。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54554828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档