简体   繁体   English

Java iterator.hasNext()始终为true

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM