Как сделать поиск по предикату?
Подскажите плиз, я сделал поиск файлов по расширению String etx(закомментировал), как теперь сделать поиск по предикату в классе?
- Убираю etx, добавляю поле Predicate condition
- Как тогда проинициализировать конструктор и что должно теперь быть в методе 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");
}
});