[英]Java iterator.hasNext() is always true
I have a little problem with the code as seen below. 我对代码有一点问题,如下所示。 The iterator().hasNext()
will never turn into false because the next()
function always returns the same element. iterator().hasNext()
永远不会变为false,因为next()
函数总是返回相同的元素。 It ends in an infinite loop . 它以无限循环结束。
I would like to set the attribute UserLock in every element in the collection (returned from GetElements()
). 我想在集合中的每个元素中设置属性UserLock(从GetElements()
返回)。 If the type of the element is "Package", I will lock all elements under the package with a recursive call of the lockAllElements function. 如果元素的类型是“Package”,我将使用lockAllElements函数的递归调用锁定包下的所有元素。
private void lockAllElements(String internalGUID) {
Element tempElem = null;
while((repo.GetPackageByGuid(internalGUID).GetElements().iterator().hasNext()) == true) {
tempElem = repo.GetPackageByGuid(internalGUID).GetElements().iterator().next();
if(tempElem.GetType().equals("Package")) {
this.lockAllElements(tempElem.GetElementGUID());
}
tempElem.ApplyUserLock();
}
}
It is always true because you get a new Iterator
instance in each iteration of your loop. 它总是正确的,因为在循环的每次迭代中都会得到一个新的Iterator
实例。 You should get a single Iterator
instance and use that instance throughout the loop. 您应该获得一个Iterator
实例并在整个循环中使用该实例。
Change 更改
while((repo.GetPackageByGuid(internalGUID).GetElements().iterator().hasNext()) == true) {
tempElem = repo.GetPackageByGuid(internalGUID).GetElements().iterator().next();
...
to 至
Iterator<Element> iter = repo.GetPackageByGuid(internalGUID).GetElements().iterator();
while(iter.hasNext()) {
tempElem = iter.next();
...
Following on from @Eran's answer... I sometimes prefer a for
loop: 继@ Eran的答案后......我有时更喜欢for
循环:
for (Iterator<Element> iter = repo.GetPackageByGuid(internalGUID).GetElements().iterator(); it.hasNext(); ) {
tempElem = iter.next();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.