简体   繁体   中英

How to set value to null when Arraylist gets exhausted.?

I m working on java. im trying below piece of code

public Proxy getNextElement() {

  Iterator<Element> itr = elementsToUse.iterator();
  if (proxiesToUse != null ){

      while (itr.hasNext()) {
        elementToReturn = itr.next();
        if(usedElements.contains(elementToReturn)==false){
           usedElements.add(elementToReturn);
           break;
        }
      }
     return elementToReturn;
   }else{
     Proxy nextElementToReturn = getNextProxy();
     return nextElementToReturn;
   }
}

now i want to throw the exception when itr.hasNext() will be false but the problem im getting is because of while loop, when itr.hasNext() gets false,the last value set to elementToReturn remains as it is and it is returned as it is but i want to return null when the list of elementsToUse has no more elements..

Just return your values differently

   public Proxy getNextElement() {
        Iterator itr = elementsToUse.iterator();
        if (proxiesToUse != null) {
            while (itr.hasNext()) {
                elementToReturn = itr.next();
                if (usedElements.contains(elementToReturn) == false) {
                    usedElements.add(elementToReturn);
                    return elementToReturn;
                }
            }
            return null;
        } else {
            Proxy nextElementToReturn = getNextProxy();
            return nextElementToReturn;
        }
    }

If there is no condition to check before setting elementToReturn to null, then you can set elementToReturn to false directly after while loop.

public Proxy getNextElement() {    
    Iterator<Element> itr = elementsToUse.iterator();   
    if (proxiesToUse != null ){        
        while (itr.hasNext()) {         
            elementToReturn = itr.next();         
            if(usedElements.contains(elementToReturn)==false){            
               usedElements.add(elementToReturn);            
               break;         
            }       
        }   
     elementToReturn = null;
     return elementToReturn;    
    }else{      
        Proxy nextElementToReturn = getNextProxy();      
        return nextElementToReturn;    
  } 
} 

Modify your code like following

        boolean condition = true;
        while (condition) {
        elementToReturn = itr.next();
        condition = itr.hasNext(); //condition to check next element present
        if(usedElements.contains(elementToReturn)==false){
           usedElements.add(elementToReturn);
           break;
        }
      }

Here is a shorter version of your code which does the same thing. I assume that usedElements is a Set as duplicates are not allowed.

public Proxy getNextElement() {
    if (proxiesToUse == null) return getNextProxy();
    for (Element element : elementToUse)
        if (usedElements.add(element)) return element;
    return null;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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