ラムダ関数を使用してFileNameFilterを作成したいとします。JAVAのラムダ関数でループを使う方法は?
私の主な問題は、関数内にループを導入したいということです。 フィルタを使用しようとしましたが、外部リストに基づいてフィルタを作成できません。続き
は私のコードです:私は何をしたいか
File targetDir = new File(path);
FilenameFilter deleteFilter = new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
for(String tag: pageTagsList){
if(name.equals(tag))
return true;
}
return false;
}
};
File[] foundFiles = targetDir.listFiles(deleteFilter);
は次のようなものです:
File[] foundFiles = targetDir.listFiles(
(dir,name)->pageTagsList.stream()
.filter(//code to filter here)
.orElse(false)
);
これを実行するための正しい方法はありますか?
はたぶんこれが最もエレガントされている:あなたの望ましい結果のためには、以下のような何かを行うことができます重要な点は、ラムダ本体内で一般に反復処理する方法を知ることですが、そうでない場合は、 'Set'の 'pageTagsSet'を使うのが最善の解決策です。 'HashSet'を参照するのは、リストを反復処理するよりも高速です。 '(dir、name) - > pageTagsList.contains(name)'はそれを行います –