Что вы знаете об интерфейсе FileFilter?
FileFilter — функциональный интерфейс из пакета java.io, применяемый для фильтрации файлов и каталогов при получении содержимого каталога через метод File.listFiles(FileFilter).
Интерфейс содержит единственный метод boolean accept(File pathname), который должен вернуть true, если файл соответствует критерию фильтрации. Поскольку FileFilter — функциональный интерфейс (один абстрактный метод), он может быть реализован через лямбда-выражение.
Примеры
Пример
File dir = new File("/home/user/documents");
// Через лямбду: только обычные файлы
File[] files = dir.listFiles(f -> f.isFile());
// Только файлы с расширением .java
File[] javaFiles = dir.listFiles(f -> f.getName().endsWith(".java"));
// Только каталоги
File[] dirs = dir.listFiles(File::isDirectory);
Существует также интерфейс FilenameFilter с методом boolean accept(File dir, String name), который передаёт каталог и имя файла отдельно. FilenameFilter удобнее, когда фильтрация идёт только по имени. В NIO.2 аналогом является DirectoryStream.Filter<Path>, а также glob-шаблоны в Files.newDirectoryStream(path, "*.java").
На собеседовании: объясните, что
FileFilter— функциональный интерфейс с методомaccept(), используемый для фильтрации результатовlistFiles(). Покажите пример с лямбдой и упомянитеFilenameFilterкак альтернативу.