Пишу для приложения галерею. Вот с помощью этой функции рекурсивно прохожусь по всем директориям и ищу там картинки
private ArrayList<Album> getAlbums(File root){
ArrayList<Album> albums = new ArrayList<>();
String androidDataFolder = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Android/data";
File[] fileList = root.listFiles();
String exts = "jpg png jpeg";
String file_ext;
for(File f: fileList){
if(f.isDirectory() && !f.isHidden()
&& !f.getAbsolutePath().equals(androidDataFolder)) {
albums.addAll(getAlbums(f));
}
else {
file_ext = f.getName().substring(f.getName().lastIndexOf(".") + 1);
if(exts.contains(file_ext)) {
albums.add(new Album(f.getParent(), f));
}
}
}
return albums;
}
Все работает, все картинки находит, но я хочу сортировать картинки по альбомам, то есть фактически отображать на экране только первую картинку из папки. То есть мне нет нужды искать все фото в определенной папке. Как сделать так, чтобы не было несколько картинок из одной и той же папки? Конечно, можно получить list со всеми картинками и потом вот этой функцией почистить дубликаты
private ArrayList<Album> clearAlbums(ArrayList<Album> albums){
boolean isUnique = true;
ArrayList<Album> cleanData = new ArrayList<>();
for (Album a: albums){
for (Album b: cleanData){
isUnique &= !a.getAlbumTitle().equals(b.getAlbumTitle());
}
if(isUnique)
cleanData.add(a);
isUnique = true;
}
return cleanData;
}
Но мне хочется откидывать дубликаты еще на стадии сбора данных(в методе getAlbums), так как там рекурсия и откидывание дубликатов уменьшило время работы метода.