@Marox
Человек

Как выбирать из папки только одно изображение?

Пишу для приложения галерею. Вот с помощью этой функции рекурсивно прохожусь по всем директориям и ищу там картинки

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), так как там рекурсия и откидывание дубликатов уменьшило время работы метода.
  • Вопрос задан
  • 144 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы