public class IteratorChain<E> extends Object implements Iterator<E>
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)
and getIterators()
have been
removed and size()
will return the number of remaining iterators in
the queue.
Constructor and Description |
---|
IteratorChain()
Construct an IteratorChain with no Iterators.
|
IteratorChain(Collection<Iterator<? extends E>> iteratorChain)
Constructs a new
IteratorChain over the collection of
iterators. |
IteratorChain(Iterator<? extends E>... iteratorChain)
Constructs a new
IteratorChain over the array of iterators. |
IteratorChain(Iterator<? extends E> iterator)
Construct an IteratorChain with a single Iterator.
|
IteratorChain(Iterator<? extends E> first,
Iterator<? extends E> second)
Constructs a new
IteratorChain over the two given iterators. |
Modifier and Type | Method and Description |
---|---|
void |
addIterator(Iterator<? extends E> iterator)
Add an Iterator to the end of the chain
|
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.
|
E |
next()
Returns the next Object of the current Iterator
|
void |
remove()
Removes from the underlying collection the last element returned by the
Iterator.
|
int |
size()
Returns the remaining number of Iterators in the current IteratorChain.
|
protected void |
updateCurrentIterator()
Updates the current iterator field to ensure that the current Iterator is
not exhausted
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
forEachRemaining
public IteratorChain()
You will normally use addIterator(Iterator)
to add some
iterators after using this constructor.
public IteratorChain(Iterator<? extends E> 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.
iterator
- the first child iterator in the IteratorChain, not nullNullPointerException
- if the iterator is nullpublic IteratorChain(Iterator<? extends E> first, Iterator<? extends E> second)
IteratorChain
over the two given iterators.
This method takes two iterators. The newly constructed iterator will iterate through each one of the input iterators in turn.
first
- the first child iterator in the IteratorChain, not nullsecond
- the second child iterator in the IteratorChain, not nullNullPointerException
- if either iterator is nullpublic IteratorChain(Iterator<? extends E>... iteratorChain)
IteratorChain
over 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.
iteratorChain
- the array of iterators, not nullNullPointerException
- if iterators array is or contains nullpublic IteratorChain(Collection<Iterator<? extends E>> iteratorChain)
IteratorChain
over 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.
iteratorChain
- the collection of iterators, not nullNullPointerException
- if iterators collection is or contains nullClassCastException
- if iterators collection doesn't contain an
iteratorpublic void addIterator(Iterator<? extends E> iterator)
iterator
- Iterator to addIllegalStateException
- if I've already started iteratingNullPointerException
- if the iterator is nullpublic int size()
public boolean isLocked()
protected void updateCurrentIterator()
public boolean hasNext()
public E next()
next
in interface Iterator<E>
NoSuchElementException
- if all the Iterators are
exhaustedpublic void remove()
remove
in interface Iterator<E>
UnsupportedOperationException
- if the remove operator is not
supported by the underlying IteratorIllegalStateException
- 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.Copyright © 2001–2019 The Apache Software Foundation. All rights reserved.