Java Добавление элементов в ArrayList во время итерации - PullRequest
0 голосов
/ 10 мая 2018

Я пытаюсь перебрать ArrayList и, во время этого цикла, добавить больше элементов в список. Проблема моего кода в том, что он не работает, и мой первый цикл циклов только один раз (сначала он содержит только корневой каталог).

 for (ListIterator<File> iterator = dirs.listIterator(); iterator.hasNext(); ){
            for (File file : iterator.next().listFiles()) {
                if (checkCondition(file)) {
                    fileList.add(file);
                }
                if (file.isDirectory()) {
                    iterator.add(file);
                }
            }
        }

Где dirs - ArrayList файлов.
Я прочитал много ответов на stackoverflow (на самом деле это один из них), но ни один из них, похоже, не работает (очевидно, я делаю некоторые ошибки).

1 Ответ

0 голосов
/ 10 мая 2018

Если вы прочитаете Java Doc для метода add (E) ListIterator, вы найдете следующее:

Новый элемент вставляется перед неявным курсором: последующий вызов next будетбез изменений, и последующий вызов предыдущего вернет новый элемент.

Это означает, что вызов next () не позволит вам перебрать новый элемент.

По разным причинамизменение списка во время итерации не должно выполняться с помощью итератора или цикла foreach.Может быть, вы должны сделать это простым, и это должно сработать (если dirs - объект List):

    for (int i = 0; i < dirs.size(); i++) {
        List<File> files = dirs.get(i).listFiles();
        for (File file : files) {
            if (checkCondition(file)) {
                fileList.add(file);
            }
            if (file.isDirectory()) {
                dirs.add(file);
            }
        }
    }
...