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 User和User.
所以我试图使用迭代器迭代这个列表并打印包含在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
您在每次迭代中推进迭代器两次.
while (iteratorUserRoles.hasNext()) {
System.out.println(iteratorUserRoles.next().getName());
//iteratorUserRoles.next(); remove this
}
Run Code Online (Sandbox Code Playgroud)
如果迭代器有一个剩余的元素并且你调用了iteratorUserRoles.next()两次,那么你将得到一个例外.
| 归档时间: |
|
| 查看次数: |
33 次 |
| 最近记录: |