Как сделать поиск по предикату?

Подскажите плиз, я сделал поиск файлов по расширению String etx(закомментировал), как теперь сделать поиск по предикату в классе?

  1. Убираю etx, добавляю поле Predicate condition
  2. Как тогда проинициализировать конструктор и что должно теперь быть в методе visitFile
public class  SearchFiles  implements FileVisitor<Path> {
    private List<Path> files = new ArrayList<>();
    private Predicate<Path> condition;
    // private String etx;

    public SearchFiles(Predicate<Path> condition) {


    }

    public List<Path> getFiles() {
        return files;
    }

 @Override
   public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
        //String fileName = file.getFileName().toString();
        //if (fileName.endsWith(ext)) {
        //files.add(Paths.get(fileName));
       // }
        return CONTINUE;
    }

Ответы (1 шт):

Автор решения: Alexey R.

Как-то так:

public class SearchFiles implements FileVisitor<Path> {

    Predicate<Path> condition;

    public SearchFiles(Predicate<Path> condition){
        this.condition = condition;
    }

    ...

    @Override
    public FileVisitResult visitFile(Path path, BasicFileAttributes basicFileAttributes) throws IOException {
        if(!condition.test(path)){
            return FileVisitResult.CONTINUE;
        }
        return FileVisitResult.SKIP_SUBTREE;
    }

}

Ну и создаём объект:

new SearchFiles(new Predicate<Path>() {
    @Override
    public boolean test(Path path) {
        return path.endsWith(".txt");
    }
});
→ Ссылка