Java在迭代时将项添加到ArrayList

时间:2018-05-10 17:08:19

标签: java loops arraylist listiterator

我正在尝试迭代一个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 :(得分:1)

如果您阅读了ListIterator的add(E)方法的Java Doc,您会发现:

  

在隐式游标之前插入新元素:对next的后续调用不受影响,对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);
            }
        }
    }