gpt4 book ai didi

Java: `iterator.remove` 抛出 IllegalStateException

转载 作者:行者123 更新时间:2023-12-01 19:30:06 25 4
gpt4 key购买 nike

我在线程中有一个迭代器,我正在尝试删除重复的记录。

 Runnable readingThread = new Runnable() {
@Override
public void run() {

Iterator<Demand> iterator = null;
for (iterator = demandListFromFile.iterator(); iterator.hasNext();) {
Demand demand = iterator.next();

/**
* Find and assign the Item ID
*/
if (itemListHashMap.containsValue(demand.getItem().getItemName())) {
demand.getItem().setIditem(itemListHashMapReversed.get(demand.getItem().getItemName()));

} else {
unavailableItemsList.add(demand.getItem().getItemName());
}


/**
* Find and remove duplicate records
*/
for (Map.Entry<Date, String> entry : demandListHashMap.entries()) {

if (demand.getDueDate().equals(entry.getKey()) && demand.getItem().getItemName().equals(entry.getValue())) {

iterator.remove();
}

}

}

}

删除一些项目后,iterator.remove 抛出以下异常

Exception in thread "Thread-0" java.lang.IllegalStateException
at java.base/java.util.ArrayList$Itr.remove(ArrayList.java:1009)
at com.xxx.xxx.ui.Home$7.run(Home.java:455)
at java.base/java.lang.Thread.run(Thread.java:834)

为什么会发生这种情况?请注意,为了保持这篇文章的简短,我删除了迭代器前后的代码。

最佳答案

Iterator.java删除方法:

    @throws IllegalStateException if the next method has not
yet been called, or the remove method has already
been called after the last call to the next method
void remove() {
..
}

问题出在您的 for 循环“查找并删除重复记录”中,您可能多次调用 iterator.remove 。 remove 方法会删除您正在查看的当前元素,因此每次使用 next() 只能调用它一次。为了确保只调用一次,请在 iterator.remove();

下面添加一个 break 语句

关于Java: `iterator.remove` 抛出 IllegalStateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60017952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com