Java 在迭代时向 ArrayList 添加项目
Java Adding items to ArrayList while iterating it
我正在尝试迭代 ArrayList,并在此循环中向列表中添加更多元素。我的代码的问题是它不起作用,我的第一个 for 循环只循环一次(起初它 dirs 只包含根目录)。
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。
我在 Whosebug 上阅读了很多答案(事实上这是其中之一)但似乎没有一个有效(显然我犯了一些错误)。
如果你阅读 Java ListIterator 的 add(E) 方法的文档,你会发现:
The new element is inserted before the implicit cursor: a subsequent call to next would be unaffected, and a subsequent call to previous would return the new element.
这意味着调用 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);
}
}
}
我正在尝试迭代 ArrayList,并在此循环中向列表中添加更多元素。我的代码的问题是它不起作用,我的第一个 for 循环只循环一次(起初它 dirs 只包含根目录)。
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。
我在 Whosebug 上阅读了很多答案(事实上这是其中之一)但似乎没有一个有效(显然我犯了一些错误)。
如果你阅读 Java ListIterator 的 add(E) 方法的文档,你会发现:
The new element is inserted before the implicit cursor: a subsequent call to next would be unaffected, and a subsequent call to previous would return the new element.
这意味着调用 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);
}
}
}