我想要做的是遍历一个引用某个段落的索引列表。如果段落太短,请从列表中删除索引。
这是我目前正在使用的代码,在谷歌搜索后,我试图接受使用迭代器的建议,但仍然没有运气。
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(),迭代器似乎仍然跳过元素,我理解这正是迭代器要防止的。
有人可以指出我哪里出错吗?
谢谢
答案 0 :(得分:3)
如果您想要访问索引,则应使用ListIterator
而不是普通Iterator
,并且即使删除了元素,也应保持正确更新。使用listIterator()
方法获取它,在循环中,使用nextIndex()
获取索引,使用next()
按顺序获取下一个对象。
此外,如果可以提供帮助,请不要使用索引。只需单独使用该对象,根据需要传递它,或传递索引和元素。无论哪种方式,都不要再次使用索引来访问列表。
ListIterator<Content> i = list.listIterator();
int count = 0;
while (i.hasNext()) {
int index = i.nextIndex();
Content element = i.next();
// ...
}
}
答案 1 :(得分:1)
不要混用list.indexOf
和迭代器。这可能会给你带来麻烦。从元素中获取字符串(我假设Content
对象有字符串,对吗?)并使用它。
while (i.hasNext()) {
Content element = i.next();
String paragraph = element.yourMethodToGetTheString() // Some method...
if (paragraph.split(" ").length < minWordCount) {
i.remove();
} else {
irrelevantFuction(index);
}
}
答案 2 :(得分:1)
此行int index = list.indexOf(element);
是否返回正确的索引(尝试打印)?也许您应该更改Content
,以便它可以返回自己的段落String paragraph = element.getParagraph();
如果您从头到尾迭代一个ArrayList,为什么每一轮都需要调用indexOf
?
尝试:
Iterator<Content> i = list.iterator();
int count = 0;
while (i.hasNext()) {
Content element = i.next();
String paragraph = element.getParagraph();
if (paragraph.split(" ").length < minWordCount) {
i.remove();
} else {
// fixed according to comment
int index = count++;
irrelevantFuction(index);
}
}