gpt4 book ai didi

java - 在迭代时从列表中删除对象不起作用(使用迭代器)

转载 作者:行者123 更新时间:2023-12-01 18:03:38 25 4
gpt4 key购买 nike

方法是这样的:

public void deleteEvent(View view){
Intent intent = new Intent(this, MainActivity.class);

for (User myUser:LocalDataBase.getEventByID(eventID).getInvitedUsersTotal()){
for (Event myEvent:myUser.getAttendingList())
{
ListIterator<Event> itr_attending =myUser.getAttendingList().listIterator();
if (myEvent.getId()==eventID){
itr_attending.remove();
}

}
}

Toast.makeText(getApplicationContext(), "The event was deleted",Toast.LENGTH_LONG).show();
startActivity(intent);
}

此方法用于从数据库中删除事件。为了做到这一点,我需要将其从每个受邀用户的“参加列表”中删除。 (如果用户说他要去参加该 Activity ,则该 Activity 将移至他的此列表中)。

每个 Activity 都有一个受邀用户列表(invitedUsersTotal),对于每个用户,该方法应遍历用户的参加列表并搜索想要的 Activity (myEvent.getId( )==eventID),然后删除它。

最终,该 Activity 并没有从参加名单中删除。

我在这里做错了什么?

最佳答案

阅读Javadoc of ListIterator.remove() :

Removes from the list the last element that was returned by next() or previous()

您永远不会在列表迭代器上调用 next()previous(),因此无需删除任何内容。

<小时/>

目前还不清楚您打算从列表中删除什么 - 但事实上您在同一个列表上同时有两个迭代器表明 - 如果您确实删除了任何内容 - 您会得到一个 ConcurrentModificationException 无论如何。

我认为您需要用显式迭代替换内部增强型 for 循环:您无法从使用增强型 for 循环迭代的列表中删除:

for (User myUser: ...){
Iterator<Event> it = myUser.getAttendingList().iterator();
while (it.hasNext()) {
Event myEvent = it.next();
if (myEvent.getId()==eventID){
it.remove();
}
}
}

关于java - 在迭代时从列表中删除对象不起作用(使用迭代器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38631296/

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