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())阻止吗?
问题是您调用了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)