在Java中使用迭代器时出现了java.util.NoSuchElementException异常。

16
我试图使用列表迭代器来遍历我的日志列表。目标是查找与新日志包含相同电话号码、类型和日期的日志。
然而,在我的条件语句中,我遇到了java.util.NoSuchElementException异常。有人知道可能是什么原因引起的吗?
我的代码
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);
    }

}
1个回答

56
你在同一次迭代中多次调用next(),强制Iterator移动到不存在的元素。
相反,应该避免这样做。
if (iterator.next().getPhonenumber() == phonenumber  && iterator.next().getType() == type && iterator.next().getDate() == date)
{
    updateLog(newLog, iterator.next().getId());
    ...

使用

Log log = iterator.next();

if (log.getPhonenumber() == phonenumber  && log.getType() == type && log.getDate() == date)
{
    updateLog(newLog, log .getId());
    ...

每次调用Iterator#next()方法,都会将底层光标向前移动。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接