powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Алгоритм сортировки файлов из нескольких папок.
13 сообщений из 13, страница 1 из 1
Алгоритм сортировки файлов из нескольких папок.
    #39711573
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть 2 и более папки. В них есть файлы. Нужно отсортировать это все дело в один список таким образом что бы:

1 файл из первой папки, 1 файл из второй папки .... a файл из n папки.

Сейчас сделал банально случайную выборку из каждой папки. Собрал это все в кучу. Потом так же рандомно сортирую, только уже все вместе. Получается не очень.

Подскажите как можно сделать? ибо у самого чет не доходят мозги до этого.
...
Рейтинг: 0 / 0
Алгоритм сортировки файлов из нескольких папок.
    #39711587
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сортировка слиянием?
...
Рейтинг: 0 / 0
Алгоритм сортировки файлов из нескольких папок.
    #39711602
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл ник, слить все в одно и отсортировать?
...
Рейтинг: 0 / 0
Алгоритм сортировки файлов из нескольких папок.
    #39711611
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал такую штуку:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
               List<File> result = new ArrayList<>();

                File mostFullFolder = folders.stream()
                        .max(Comparator.comparingInt(o -> o.listFiles() != null ? o.listFiles().length : 0)).orElse(null);

                for(int i=0;i<(mostFullFolder.list()!=null?mostFullFolder.list().length:0);i++) {

                    for (File folder : folders) {

                        if (folder != null) {

                            try {

                                File file = folder.listFiles() != null ? folder.listFiles()[i] : null;

                                if (file != null) {
                                    result.add(file);
                                }

                            } catch (ArrayIndexOutOfBoundsException e) {
                                // IGNORE INDEX
                            }

                        }

                    }

                }

                LOGGER.info(Arrays.deepToString(result.toArray()));



Нормально? или можно как-то улучшить алгоритм?
...
Рейтинг: 0 / 0
Алгоритм сортировки файлов из нескольких папок.
    #39711612
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
folders - List<File>, получаю в методе сортировке.
...
Рейтинг: 0 / 0
Алгоритм сортировки файлов из нескольких папок.
    #39711642
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Зачем сортировать файлы а не их имена(строки)
2) Возьми замапь все файлы на их имена, и положи в SortedSet

Код: java
1.
2.
3.
list<String> names = folders.map(_.getName)
SortedSet<String> set = new TreeSet<>();
set.addAll(names)


3) Код ужасный конечно...
...
Рейтинг: 0 / 0
Алгоритм сортировки файлов из нескольких папок.
    #39711663
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл ник, зачем мне это? файлы разные в каждой папке. Требование - что бы были файли последовательные, как я описывал выше. А не вразброс. Главное что бы не попадались файлы из одной и той же папки не более чем раз. Чем ужасен? агрументируйте.
...
Рейтинг: 0 / 0
Алгоритм сортировки файлов из нескольких папок.
    #39711664
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл ник2) Возьми замапь все файлы на их имена, и положи в SortedSet
Код: java
1.
2.
3.
list<String> names = folders.map(_.getName)
SortedSet<String> set = new TreeSet<>();
set.addAll(names)




Походу цель задачи даже не читали.
...
Рейтинг: 0 / 0
Алгоритм сортировки файлов из нескольких папок.
    #39711683
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tsyklop
Походу цель задачи даже не читали.

Читал, но в очередной раз сделал типичную ошибку - когда непонятно - додумал.

Решительно непонятно, как совмещаются вот эти требования, и что вообще надо
авторНужно отсортировать это все дело в один список таким образом что бы:

1 файл из первой папки, 1 файл из второй папки .... a файл из n папки.
авторТребование - что бы были файли последовательные, как я описывал выше. А не вразброс. Главное что бы не попадались файлы из одной и той же папки не более чем раз

Абстрагируясь от деталей, все же непонятно, почему сортировать(если тут дейтсвительно сортировка) именно файлы, а не их имена? Потом файл можно легко прочитать по имени, ну это лирика.

авторЧем ужасен? агрументируйте.
Сначала общие для всех Java-программ
1) Мешанина стримов и прямой итерации, я бы делал конечно на стримах, но можно и через for(), но мешать это совсем ни о чем
2) catch ArrayIndexOfBoundException это вообще никакой код ревью пройти не может
3) Все эти проверки на нулл просто засоряют понимание того что код делает. Фильтруйте все раньше

Ну и как приверженец ФП, я бы конечно еще избавился от mutable переменных, 99% все можно решить через однострочный стрим, но это уже на любителя
...
Рейтинг: 0 / 0
Алгоритм сортировки файлов из нескольких папок.
    #39711700
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл ник, Есть 3 папки. В каждой папке есть файлы. Мне нужно отсортировать файлы из этих папок таким образом:
файл из первой папки, файл из второй папки, файл из первой, из второй и т.д. На счет имен согласен, можно же получить массив строк - file.list() .

Додумывать зачем? вы человек, а не обезьяна, разговаривать умеете. (без обид).

На счет кода. Отсортируй мне таким образом файлы или же строки на стримах. НО! что бы это было максимально не ресурсно затратно. Я убрал стрим, который выше привел - сразу уменьшилось использование памяти на 5 MB.

По коду:
1. Если вы словите ArrayIndexOutOfBoundsException у вас вылетит все, а значит что? цель не будет выполнена.
2. Знаете что listFiles() и даже list() могут кинуть null . где же это до этого "отфильтровать"?
3. В папках может быть разное кол-во файлов. К примеру, в первой папке 100 файлов, во второй 150. Вы будете брать большее число. И если вы захотите дернуть 101 файл (или строку) будет эксепшн выхода за границы массива. Как решать?
...
Рейтинг: 0 / 0
Алгоритм сортировки файлов из нескольких папок.
    #39711738
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopПодскажите как можно сделать?
Банальный обход в ширину. Погуглите по фразе.
...
Рейтинг: 0 / 0
Алгоритм сортировки файлов из нескольких папок.
    #39711748
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopПо коду:
1. Если вы словите ArrayIndexOutOfBoundsException у вас вылетит все, а значит что? цель не будет выполнена.
2. Знаете что listFiles() и даже list() могут кинуть null . где же это до этого "отфильтровать"?
3. В папках может быть разное кол-во файлов. К примеру, в первой папке 100 файлов, во второй 150. Вы будете брать большее число. И если вы захотите дернуть 101 файл (или строку) будет эксепшн выхода за границы массива. Как решать?

ArrayIndexException и количество файлов в папке абсолютно ортогонально к решаемой проблеме, это искууствуенно введенные вами же ограничения, с которыми вы активно боретесь. На Java, сложно написать хороший код, на Scala бы я отсортировал листы по количеству эдементов и обошелся одним foldLeft. Вот более-менее приличная версия на Java(жалко больше времени тратить), правда она основана на рекурсии и если папок много - то может и свалиться. Тогда надо делать менее красиво, через тот же обход в ширину, как уже подсказали

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
package test;

import lombok.AllArgsConstructor;
import lombok.Data;

import java.util.ArrayList;
import java.util.List;

public class Test {

    @Data
    @AllArgsConstructor
    static class State {
        int index = 0;
        List<List<String>> remaining = new ArrayList<>();
        List<String> sorted = new ArrayList<>();
    }

    public static void main(String[] args){
        List<String> folders1 = new ArrayList<String>() {{
            add("A");
            add("B");
            add("C");
        }};
        List<String> folders2 = new ArrayList<String>() {{
            add("A1");
            add("B1");
        }};
        List<String> folders3 = new ArrayList<String>() {{
            add("A2");
            add("B2");
            add("C2");
            add("D2");
        }};
        List<String> folders4 = new ArrayList<String>() {{
            add("A3");
        }};

        List<List<String>> all = new ArrayList<List<String>>() {{
            add(folders1);
            add(folders2);
            add(folders3);
            add(folders4);
        }};
        State state = new State(0, all, new ArrayList<>());
        System.out.println(sort(state));
    }

    static List<String> sort(State state) {
        if(state.remaining.size() == 0) return state.sorted;
        else {
            List<String> sorted = state.sorted;
            List<List<String>> remaining = new ArrayList<>();
            for (List<String> list : state.remaining) {
                if(list.size() > state.index) {
                    sorted.add(list.get(state.index));
                    remaining.add(list);
                }
            }
            return sort(new State(state.index + 1, remaining, sorted));
        }
    }
}
...
Рейтинг: 0 / 0
Алгоритм сортировки файлов из нескольких папок.
    #39711760
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл ник, Забыл сказать. В этих папках не будет папок, только файлы mp3.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Алгоритм сортировки файлов из нескольких папок.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]