org.apache.commons.collections.iterators
public class IteratorChain extends Object implements Iterator
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 Iteratorafter a method in the Iterator interface has been called will result in an UnsupportedOperationException. Subclasses should take care to not alter the underlying List of Iterators.
NOTE: As from version 3.0, the IteratorChain may contain no iterators. In this case the class will function as an empty iterator.
Since: Commons Collections 2.1
Version: $Revision: 171347 $ $Date: 2005-05-22 18:27:34 +0100 (Sun, 22 May 2005) $
Field Summary | |
---|---|
protected Iterator | currentIterator The current iterator |
protected int | currentIteratorIndex The index of the current iterator |
protected boolean | isLocked
ComparatorChain is "locked" after the first time
compare(Object,Object) is called |
protected List | iteratorChain The chain of iterators |
protected Iterator | lastUsedIterator
The "last used" Iterator is the Iterator upon which
next() or hasNext() was most recently called
used for the remove() operation only |
Constructor Summary | |
---|---|
IteratorChain()
Construct an IteratorChain with no Iterators.
| |
IteratorChain(Iterator iterator)
Construct an IteratorChain with a single Iterator.
| |
IteratorChain(Iterator a, Iterator b)
Constructs a new IteratorChain over the two
given iterators.
| |
IteratorChain(Iterator[] iterators)
Constructs a new IteratorChain over the array
of iterators.
| |
IteratorChain(Collection iterators)
Constructs a new IteratorChain over the collection
of iterators.
|
Method Summary | |
---|---|
void | addIterator(Iterator iterator)
Add an Iterator to the end of the chain
|
List | getIterators()
Get the list of Iterators (unmodifiable)
|
boolean | hasNext()
Return true if any Iterator in the IteratorChain has a remaining element.
|
boolean | isLocked()
Determine if modifications can still be made to the IteratorChain.
|
Object | next()
Returns the next Object of the current Iterator
|
void | remove()
Removes from the underlying collection the last element
returned by the Iterator. |
void | setIterator(int index, Iterator iterator)
Set the Iterator at the given index
|
int | size()
Number of Iterators in the current IteratorChain.
|
protected void | updateCurrentIterator()
Updates the current iterator field to ensure that the current Iterator
is not exhausted |
You will normally use addIterator to add some iterators after using this constructor.
Parameters: iterator first Iterator in the IteratorChain
Throws: NullPointerException if the iterator is null
IteratorChain
over the two
given iterators.
Parameters: a the first child iterator b the second child iterator
Throws: NullPointerException if either iterator is null
IteratorChain
over the array
of iterators.
Parameters: iterators the array of iterators
Throws: NullPointerException if iterators array is or contains null
IteratorChain
over the collection
of iterators.
Parameters: iterators the collection of iterators
Throws: NullPointerException if iterators collection is or contains null ClassCastException if iterators collection doesn't contain an iterator
Parameters: iterator Iterator to add
Throws: IllegalStateException if I've already started iterating NullPointerException if the iterator is null
Returns: the unmodifiable list of iterators added
Returns: true if elements remain
Returns: true if IteratorChain cannot be modified, false if it can
Returns: Object from the current Iterator
Throws: java.util.NoSuchElementException if all the Iterators are exhausted
Throws: UnsupportedOperationException if the remove operator is not supported by the underlying Iterator 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.
Parameters: index index of the Iterator to replace iterator Iterator to place at the given index
Throws: IndexOutOfBoundsException if index < 0 or index > size() IllegalStateException if I've already started iterating NullPointerException if the iterator is null
Returns: Iterator count