Java 迭代时从列表中删除对象不会';t工作(使用迭代器)

Java 迭代时从列表中删除对象不会';t工作(使用迭代器),java,android,foreach,Java,Android,Foreach,方法如下: public void deleteEvent(View view){ Intent intent = new Intent(this, MainActivity.class); for (User myUser:LocalDataBase.getEventByID(eventID).getInvitedUsersTotal()){ for (Event myEvent:myUser.getAttendingList())

方法如下:

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);
}
public void delete事件(视图){
意向意向=新意向(此,MainActivity.class);
对于(用户myUser:LocalDataBase.getEventByID(eventID.GetInvitedUserTotal()){
对于(事件myEvent:myUser.GetAttentingList())
{
ListIterator itr_attenting=myUser.getAttentingList().ListIterator();
if(myEvent.getId()==eventID){
itr_.remove();
}
}
}
Toast.makeText(getApplicationContext(),“事件已被删除”,Toast.LENGTH_LONG.show();
星触觉(意向);
}
此方法用于从数据库中删除事件。为了做到这一点,我需要将其从每个受邀用户的“参与列表”中删除。(如果用户说他要参加活动,则活动将移动到此用户列表)

每个事件都有一个受邀请用户的列表
(invitedUsersTotal)
,对于每个用户,该方法应该检查用户的参与列表并搜索想要的事件
(myEvent.getId()==eventID)
,然后删除它

最终,该活动不会从出席名单中删除

我做错了什么

阅读:

从列表中删除
next()
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();
    }
  }
}
for(用户myUser:…){
迭代器it=myUser.GetAttentingList().Iterator();
while(it.hasNext()){
Event myEvent=it.next();
if(myEvent.getId()==eventID){
it.remove();
}
}
}
阅读以下内容:

从列表中删除
next()
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();
    }
  }
}
for(用户myUser:…){
迭代器it=myUser.GetAttentingList().Iterator();
while(it.hasNext()){
Event myEvent=it.next();
if(myEvent.getId()==eventID){
it.remove();
}
}
}
你喜欢这样吗

ListIterator<Event> itr_attending =myUser.getAttendingList().listIterator();
      int id = myEvent.getId()
      while(itr_attending.hasNext()){               
           if (id==eventID){
               itr_attending.remove();
           }
      }
ListIterator itr\u attenting=myUser.getAttentingList().ListIterator();
int id=myEvent.getId()
当(itr_attenting.hasNext()){
if(id==eventID){
itr_.remove();
}
}
你喜欢这样吗

ListIterator<Event> itr_attending =myUser.getAttendingList().listIterator();
      int id = myEvent.getId()
      while(itr_attending.hasNext()){               
           if (id==eventID){
               itr_attending.remove();
           }
      }
ListIterator itr\u attenting=myUser.getAttentingList().ListIterator();
int id=myEvent.getId()
当(itr_attenting.hasNext()){
if(id==eventID){
itr_.remove();
}
}

我认为您应该这样迭代:

 ListIterator<Event> itr_attending =myUser.getAttendingList().listIterator();
  // Below you are iterating
  while(itr_attending.hasNext()){
       Event event = itr_attending.next();
       int eventId = event.getEventId() // Or something like that based on event object
       if (myEvent.getId()==eventID){
           itr_attending.remove();
       }
  }
ListIterator itr\u attenting=myUser.getAttentingList().ListIterator();
//下面是迭代
while(itr\u.hasNext()){
Event=itr_attenting.next();
int eventId=event.getEventId()//或基于事件对象的类似内容
if(myEvent.getId()==eventID){
itr_.remove();
}
}

获取迭代器后,需要使用
itr\u.hasNext()
循环。它将检查循环中是否有下一个元素。如果条件成功,则可以通过
itr\u attenting.next()
获取事件对象。然后,做你想做的。

我认为你应该像这样迭代:

 ListIterator<Event> itr_attending =myUser.getAttendingList().listIterator();
  // Below you are iterating
  while(itr_attending.hasNext()){
       Event event = itr_attending.next();
       int eventId = event.getEventId() // Or something like that based on event object
       if (myEvent.getId()==eventID){
           itr_attending.remove();
       }
  }
ListIterator itr\u attenting=myUser.getAttentingList().ListIterator();
//下面是迭代
while(itr\u.hasNext()){
Event=itr_attenting.next();
int eventId=event.getEventId()//或基于事件对象的类似内容
if(myEvent.getId()==eventID){
itr_.remove();
}
}

获取迭代器后,需要使用
itr\u.hasNext()
循环。它将检查循环中是否有下一个元素。如果条件成功,则可以通过
itr\u attenting.next()
获取事件对象。然后,做你想做的。

什么不起作用?什么都没发生吗?您的计算机爆炸了吗?事件没有从出席列表中删除,很抱歉,当您调用
itr\u atting.remove()
时,您认为您正在从列表中删除什么?我想我要删除的事件。。。这就是我试图做的。顺便说一句,你在迭代吗?什么不起作用?什么都没发生吗?您的计算机爆炸了吗?事件没有从出席列表中删除,很抱歉,当您调用
itr\u atting.remove()
时,您认为您正在从列表中删除什么?我想我要删除的事件。。。这就是我试图做的。顺便说一句,你在迭代吗?