java - 从 ArrayList 中删除元素 - 代码正在跳过元素

标签 java arrays iterator

我想做的是循环遍历引用某个段落的索引列表。如果段落太短,请从列表中删除索引。

这是我目前正在使用的代码,在谷歌搜索之后,我尝试接受使用迭代器的建议,但仍然没有成功。

    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/

相关文章:

Java:带有 unicode 字符的 String.toCharArray()

java - 我是编程的新手,需要一些帮助和建议

JAVA:如何按下一个最接近的值对数组进行排序?

vector - 压缩可变向量迭代器的惯用 Rust 代码

c++ - 转换一个由迭代器指向的对象

java - java中的迭代

Java:这里的返回是做什么的?

Java兼容的cksum函数

Java 客户端线程池已满

arrays - 收到错误 : “Cannot subscript a value of type ‘[Double]’ with an index of type ‘(Any) -> Int’ ”