Class IteratorChain<E>
- java.lang.Object
- 
- org.apache.openjpa.lib.util.collections.IteratorChain<E>
 
- 
- All Implemented Interfaces:
- java.util.Iterator<E>
 
 public class IteratorChain<E> extends java.lang.Object implements java.util.Iterator<E>An IteratorChain is an Iterator that wraps a number of Iterators.This class makes multiple iterators look like one to the caller. When any method from the Iterator interface is called, the IteratorChain will delegate to a single underlying Iterator. The IteratorChain will invoke the Iterators in sequence until all Iterators are exhausted. Under many circumstances, linking Iterators together in this manner is more efficient (and convenient) than reading out the contents of each Iterator into a List and creating a new Iterator. Calling a method that adds new Iterator after a method in the Iterator interface has been called will result in an UnsupportedOperationException. NOTE: As from version 3.0, the IteratorChain may contain no iterators. In this case the class will function as an empty iterator. NOTE: As from version 4.0, the IteratorChain stores the iterators in a queue and removes any reference to them as soon as they are not used anymore. Thus the methods setIterator(Iterator)andgetIterators()have been removed andsize()will return the number of remaining iterators in the queue.- Since:
- 2.1
 
- 
- 
Constructor SummaryConstructors Constructor Description IteratorChain()Construct an IteratorChain with no Iterators.IteratorChain(java.util.Collection<java.util.Iterator<? extends E>> iteratorChain)Constructs a newIteratorChainover the collection of iterators.IteratorChain(java.util.Iterator<? extends E> iterator)Construct an IteratorChain with a single Iterator.IteratorChain(java.util.Iterator<? extends E>... iteratorChain)Constructs a newIteratorChainover the array of iterators.IteratorChain(java.util.Iterator<? extends E> first, java.util.Iterator<? extends E> second)Constructs a newIteratorChainover the two given iterators.
 - 
Method SummaryAll Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddIterator(java.util.Iterator<? extends E> iterator)Add an Iterator to the end of the chainbooleanhasNext()Return true if any Iterator in the IteratorChain has a remaining element.booleanisLocked()Determine if modifications can still be made to the IteratorChain.Enext()Returns the next Object of the current Iteratorvoidremove()Removes from the underlying collection the last element returned by the Iterator.intsize()Returns the remaining number of Iterators in the current IteratorChain.protected voidupdateCurrentIterator()Updates the current iterator field to ensure that the current Iterator is not exhausted
 
- 
- 
- 
Constructor Detail- 
IteratorChainpublic IteratorChain() Construct an IteratorChain with no Iterators.You will normally use addIterator(Iterator)to add some iterators after using this constructor.
 - 
IteratorChainpublic IteratorChain(java.util.Iterator<? extends E> iterator) Construct an IteratorChain with a single Iterator.This method takes one iterator. The newly constructed iterator will iterate through that iterator. Thus calling this constructor on its own will have no effect other than decorating the input iterator. You will normally use addIterator(Iterator)to add some more iterators after using this constructor.- Parameters:
- iterator- the first child iterator in the IteratorChain, not null
- Throws:
- java.lang.NullPointerException- if the iterator is null
 
 - 
IteratorChainpublic IteratorChain(java.util.Iterator<? extends E> first, java.util.Iterator<? extends E> second) Constructs a newIteratorChainover the two given iterators.This method takes two iterators. The newly constructed iterator will iterate through each one of the input iterators in turn. - Parameters:
- first- the first child iterator in the IteratorChain, not null
- second- the second child iterator in the IteratorChain, not null
- Throws:
- java.lang.NullPointerException- if either iterator is null
 
 - 
IteratorChainpublic IteratorChain(java.util.Iterator<? extends E>... iteratorChain) Constructs a newIteratorChainover the array of iterators.This method takes an array of iterators. The newly constructed iterator will iterate through each one of the input iterators in turn. - Parameters:
- iteratorChain- the array of iterators, not null
- Throws:
- java.lang.NullPointerException- if iterators array is or contains null
 
 - 
IteratorChainpublic IteratorChain(java.util.Collection<java.util.Iterator<? extends E>> iteratorChain) Constructs a newIteratorChainover the collection of iterators.This method takes a collection of iterators. The newly constructed iterator will iterate through each one of the input iterators in turn. - Parameters:
- iteratorChain- the collection of iterators, not null
- Throws:
- java.lang.NullPointerException- if iterators collection is or contains null
- java.lang.ClassCastException- if iterators collection doesn't contain an iterator
 
 
- 
 - 
Method Detail- 
addIteratorpublic void addIterator(java.util.Iterator<? extends E> iterator) Add an Iterator to the end of the chain- Parameters:
- iterator- Iterator to add
- Throws:
- java.lang.IllegalStateException- if I've already started iterating
- java.lang.NullPointerException- if the iterator is null
 
 - 
sizepublic int size() Returns the remaining number of Iterators in the current IteratorChain.- Returns:
- Iterator count
 
 - 
isLockedpublic boolean isLocked() Determine if modifications can still be made to the IteratorChain. IteratorChains cannot be modified once they have executed a method from the Iterator interface.- Returns:
- true if IteratorChain cannot be modified, false if it can
 
 - 
updateCurrentIteratorprotected void updateCurrentIterator() Updates the current iterator field to ensure that the current Iterator is not exhausted
 - 
hasNextpublic boolean hasNext() Return true if any Iterator in the IteratorChain has a remaining element.- Specified by:
- hasNextin interface- java.util.Iterator<E>
- Returns:
- true if elements remain
 
 - 
nextpublic E next() Returns the next Object of the current Iterator- Specified by:
- nextin interface- java.util.Iterator<E>
- Returns:
- Object from the current Iterator
- Throws:
- java.util.NoSuchElementException- if all the Iterators are exhausted
 
 - 
removepublic void remove() Removes from the underlying collection the last element returned by the Iterator. As with next() and hasNext(), this method calls remove() on the underlying Iterator. Therefore, this method may throw an UnsupportedOperationException if the underlying Iterator does not support this method.- Specified by:
- removein interface- java.util.Iterator<E>
- Throws:
- java.lang.UnsupportedOperationException- if the remove operator is not supported by the underlying Iterator
- java.lang.IllegalStateException- if the next method has not yet been called, or the remove method has already been called after the last call to the next method.
 
 
- 
 
-