当我尝试在此列表中使用迭代器时,为什么会抛出此异常?

1 java iterator list java-collections-api

我有这种类型的集合:

List<com.liferay.portal.model.Role> ruoli
ruoli = currentUser.getRoles(); 
Run Code Online (Sandbox Code Playgroud)

包含3个元素(我使用调试器看到它​​),每个Role对象都有一个名称字段,并且previos列表中的3个对象具有以下名称:Administrator,Power UserUser.

所以我试图使用迭代器迭代这个列表并打印包含在ruoli列表中的这3个对象的name字段的值,所以我这样做:

Iterator<Role> iteratorUserRoles = ruoli.iterator();

while (iteratorUserRoles.hasNext()) {
    System.out.println(iteratorUserRoles.next().getName());
    iteratorUserRoles.next();
}
Run Code Online (Sandbox Code Playgroud)

问题是它没有显示出来

但在堆栈跟踪中我得到:

**Administrator**
**Power User**
**User**
Run Code Online (Sandbox Code Playgroud)

正如我所料,但我得到了这样的信息:

**Administrator**
**User**
Run Code Online (Sandbox Code Playgroud)

然后它抛出此异常:

2015-01-26 10:20:13,071 [[ACTIVE] ExecuteThread:'1'表示队列:'weblogic.kernel.Default(self-tuning)'] ERROR commons.CommonsLogger.error(38) - 无法执行动作java .util.NoSuchElementException

似乎在尝试执行此操作时抛出异常:

iteratorUserRoles.next();
Run Code Online (Sandbox Code Playgroud)

为什么?可能是什么问题呢?我在做什么?如何解决此问题并正确迭代所有对象到我的列表中?

TNX

Era*_*ran 5

您在每次迭代中推进迭代器两次.

while (iteratorUserRoles.hasNext()) {
    System.out.println(iteratorUserRoles.next().getName());
    //iteratorUserRoles.next(); remove this
}
Run Code Online (Sandbox Code Playgroud)

如果迭代器有一个剩余的元素并且你调用了iteratorUserRoles.next()两次,那么你将得到一个例外.