public abstract class LazyIteratorChain<E>
extends java.lang.Object
implements java.util.Iterator<E>
This class makes multiple iterators look like one to the caller. When any method from the Iterator interface is called, the LazyIteratorChain will delegate to a single underlying Iterator. The LazyIteratorChain will invoke the Iterators in sequence until all Iterators are exhausted.
The Iterators are provided by nextIterator(int)
which has to be overridden by
sub-classes and allows to lazily create the Iterators as they are accessed:
return new LazyIteratorChain<String>() { protected Iterator<String> nextIterator(int count) { return count == 1 ? Arrays.asList("foo", "bar").iterator() : null; } };
Once the inner Iterator's Iterator.hasNext()
method returns false,
nextIterator(int)
will be called to obtain another iterator, and so on
until nextIterator(int)
returns null, indicating that the chain is exhausted.
NOTE: The LazyIteratorChain may contain no iterators. In this case the class will function as an empty iterator.
Constructor and Description |
---|
LazyIteratorChain() |
Modifier and Type | Method and Description |
---|---|
boolean |
hasNext()
Return true if any Iterator in the chain has a remaining element.
|
E |
next()
Returns the next element of the current Iterator
|
void |
remove()
Removes from the underlying collection the last element returned by the Iterator.
|
public boolean hasNext()
hasNext
in interface java.util.Iterator<E>
public E next()
next
in interface java.util.Iterator<E>
java.util.NoSuchElementException
- if all the Iterators are exhaustedpublic void remove()
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.
remove
in interface java.util.Iterator<E>
java.lang.UnsupportedOperationException
- if the remove operator is not
supported by the underlying Iteratorjava.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.Copyright © 2010 - 2020 Adobe. All Rights Reserved