Javaストリームにコールバック関数を追加します。

ニック・メリス:

のは、私は次の操作を実行したいとしましょう:

  • (ストリーム)として指定したディレクトリ内のファイルを一覧表示します
  • 消費する消費者のためのリーダー(例えばBufferedReaderの)に、各ファイル(パス)をマップします。
  • ファイルが消費されたら、ファイルを削除します

コードは少し次のようになります。

Stream<Reader> stream = Files.list(Paths.get("myFolder")) // Returns a stream of Path
  .callback(Files::delete)                                // This would have to be called after the reader has been consumed
  .map(Files::newBufferedReader);                         // Maps every path into a Reader

私が使用している場合はpeek()ファイルを削除することが読者にマップする必要があるときに私は流れた後に実行されますが消費されていることを何かを必要があると思いますので、そのファイルが、そこではありません。何か案が?

ニック・メリス:

私は最終的にはわずかに異なるアプローチを行ってきました。私はリーダークラスを拡張し、ラッパーを作成し、私は単純に上書きしclose()、読者が消費された後(すなわち、リネーム、削除、など移動)メソッドファイルにいくつかの追加操作を実行します。

public class CustomReader extends Reader {
  private Reader reader;
  private File file;

  public CustomReader(File file) {
    this.file = file;
    this.reader = new FileReader(file);
  } 

  [...]
  @Override
  public void close() {
    super.close();
    // Do what you need to do with your file
  }
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=168042&siteId=1