Java iterator.hasNext()始终为true

Alu*_*ard 4 java iterator while-loop

我对代码有一点问题,如下所示.将iterator().hasNext()永远不会变成假的,因为next()函数总是返回相同的元素.它以无限循环结束.

我想在集合中的每个元素中设置属性UserLock(从中返回 GetElements()).如果元素的类型是"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(); 
    }
}
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 16

它始终是真的,因为您Iterator在循环的每次迭代中都获得了一个新实例.您应该获得单个Iterator实例并在整个循环中使用该实例.

更改

while((repo.GetPackageByGuid(internalGUID).GetElements().iterator().hasNext()) == true) {
    tempElem = repo.GetPackageByGuid(internalGUID).GetElements().iterator().next();
    ...
Run Code Online (Sandbox Code Playgroud)

Iterator<Element> iter = repo.GetPackageByGuid(internalGUID).GetElements().iterator();
while(iter.hasNext()) {
    tempElem = iter.next();
    ...
Run Code Online (Sandbox Code Playgroud)