問題

私はJavaでWatchServiceを介してディレクトリを監視しているコードを持っています。 しかし、現在私はループを使用していますが、ストリームに変更したいと思います。

 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であるかどうかを確認し、はいの場合は名前を変更して名前を変更するログファイルを作成します。 だから私ができたことは:

     key.pollEvents()
       .stream()
       .filter(e -> isEdxFile(e.context().toString()))
       .forEach( e -> runOnOption.get(option).accept(dirPath+e.context().toString()));
 

しかし、私が紛失しているのは、pdf拡張子を持つファイルを見つけるときにwhileループとループから戻ることです。

  ベストアンサー

あなたが探しているのは

 .findFirst() // first element with such a filter condition
.ifPresent(e -> runOnOption.get(option).accept(dirPath+e.context().toString()));
 

そのような要素がコンシューマロジックを実行した後に見つかるとすぐに戻ります。

  同じタグがついた質問を見る

javajava-8java-stream