J'essaie de parcourir une liste en utilisant l'itérateur sur ma liste de journaux. L'objectif est de rechercher un journal contenant le même numéro de téléphone, le même type et la même date que le nouveau journal
Cependant, j'obtiens une exception Java.util.NoSuchElementException dans mon instruction conditionnelle. Quelqu'un sait-il ce qui pourrait causer le problème?
Mon code
public void addLog(String phonenumber, String type, long date, int incoming, int outgoing)
{
//Check if log exists or else create it.
Log newLog = new Log(phonenumber, type, date, incoming, outgoing);
//Log exists
Boolean notExist = false;
//Iterator loop
Iterator<Log> iterator = logs.iterator();
while (iterator.hasNext())
{
//This is where get the exception
if (iterator.next().getPhonenumber() == phonenumber && iterator.next().getType() == type && iterator.next().getDate() == date)
{
updateLog(newLog, iterator.next().getId());
}
else
{
notExist = true;
}
}
if (notExist)
{
logs.add(newLog);
}
}
Vous appelez next()
plusieurs fois en une seule itération forçant le Iterator
à se déplacer vers un élément qui n'existe pas.
Au lieu de
if (iterator.next().getPhonenumber() == phonenumber && iterator.next().getType() == type && iterator.next().getDate() == date)
{
updateLog(newLog, iterator.next().getId());
...
Utilisation
Log log = iterator.next();
if (log.getPhonenumber() == phonenumber && log.getType() == type && log.getDate() == date)
{
updateLog(newLog, log .getId());
...
Chaque fois que vous appelez Iterator#next()
, il déplace le curseur sous-jacent vers l'avant.