我想做的是循环遍历引用某个段落的索引列表。如果段落太短,请从列表中删除索引。
这是我目前正在使用的代码,在谷歌搜索之后,我尝试接受使用迭代器的建议,但仍然没有成功。
ArrayList<Content> list = anotherList;
Iterator<Content> i = list.iterator();
while (i.hasNext()) {
Content element = i.next();
int index = list.indexOf(element);
String paragraph = getContent(index);
if (paragraph.split(" ").length < minWordCount) {
i.remove();
} else {
irrelevantFuction(index);
}
}
如果调用 i.remove(),迭代器似乎仍然会跳过元素,我理解这正是迭代器要防止的情况。
有人可以指出我哪里出错了吗?
谢谢
最佳答案
如果您想要访问索引,则应该使用 ListIterator
而不是普通的 Iterator
,并且即使元素被删除也能保持正确更新。使用 listIterator()
方法获取它,在循环中使用 nextIndex()
获取索引,然后使用 next()
获取索引。按顺序获取下一个对象。
另外,如果可以的话,不要使用索引。只需单独使用该对象,根据需要传递该对象,或者同时传递索引和元素。无论哪种方式,都不要再次使用索引来访问列表。
ListIterator<Content> i = list.listIterator();
int count = 0;
while (i.hasNext()) {
int index = i.nextIndex();
Content element = i.next();
// ...
}
}
关于java - 从 ArrayList 中删除元素 - 代码正在跳过元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5812500/