Java:迭代 ArrayList 时出现 NoSuchElementException

Art*_*lay 2 java iterator arraylist nosuchelementexception

我想删除重复的元素,因此迭代 ArrayList 并比较两个连续的元素。(人物具有可比性)

ArrayList<Person> persons = getHelper().findAllPersons();
Collections.sort(persons);
ListIterator<Person> it = persons.listIterator();
if(it.hasNext()) {
    Person tmp = it.next();
    while(it.hasNext()) {
        if(tmp.getLastDiscovered() == it.next().getLastDiscovered()) {
            getHelper().delete(tmp);
        }
    tmp = it.next();
    }
}
Run Code Online (Sandbox Code Playgroud)

我在以下位置收到 NoSuchElementExceptiontmp = it.next();

难道不应该while(it.hasNext())阻止吗?

ken*_*ytm 5

问题是您调用了it.next()两次,这将使迭代器前进两次。

您应该存储该值以避免重复副作用。

    Person person = it.next();
    if (tmp.getLastDiscovered() == person.getLastDiscovered()) {
        getHelper().delete(tmp);
    }
    tmp = person;
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用 for-each 循环来避免与迭代器交互(我假设所有迭代器Person都不为空):

Person tmp = null;
for (Person person : persons) {
    if (tmp != null && tmp.getLastDiscovered() == person.getLastDiscovered()) {
        getHelper().delete(tmp);
    }
    tmp = person;
}
Run Code Online (Sandbox Code Playgroud)