Class IteratorChain

  • All Implemented Interfaces:
    Iterator

    public class IteratorChain
    extends Object
    implements Iterator
    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 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: 647116 $ $Date: 2008-04-11 13:23:08 +0200 (Fri, 11 Apr 2008) $
    Author:
    Morgan Delagrange, Stephen Colebourne
    • Field Detail

      • iteratorChain

        protected final List iteratorChain
        The chain of iterators
      • currentIteratorIndex

        protected int currentIteratorIndex
        The index of the current iterator
      • currentIterator

        protected Iterator currentIterator
        The current iterator
      • lastUsedIterator

        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
      • isLocked

        protected boolean isLocked
        ComparatorChain is "locked" after the first time compare(Object,Object) is called
    • Constructor Detail

      • IteratorChain

        public IteratorChain()
        Construct an IteratorChain with no Iterators.

        You will normally use addIterator(Iterator) to add some iterators after using this constructor.

      • IteratorChain

        public IteratorChain​(Iterator iterator)
        Construct an IteratorChain with a single Iterator.
        Parameters:
        iterator - first Iterator in the IteratorChain
        Throws:
        NullPointerException - if the iterator is null
      • IteratorChain

        public IteratorChain​(Iterator a,
                             Iterator b)
        Constructs a new 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

        public IteratorChain​(Iterator[] iterators)
        Constructs a new IteratorChain over the array of iterators.
        Parameters:
        iterators - the array of iterators
        Throws:
        NullPointerException - if iterators array is or contains null
      • IteratorChain

        public IteratorChain​(Collection iterators)
        Constructs a new 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
    • Method Detail

      • addIterator

        public void addIterator​(Iterator iterator)
        Add an Iterator to the end of the chain
        Parameters:
        iterator - Iterator to add
        Throws:
        IllegalStateException - if I've already started iterating
        NullPointerException - if the iterator is null
      • getIterators

        public List getIterators()
        Get the list of Iterators (unmodifiable)
        Returns:
        the unmodifiable list of iterators added
      • size

        public int size()
        Number of Iterators in the current IteratorChain.
        Returns:
        Iterator count
      • isLocked

        public 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
      • updateCurrentIterator

        protected void updateCurrentIterator()
        Updates the current iterator field to ensure that the current Iterator is not exhausted
      • hasNext

        public boolean hasNext()
        Return true if any Iterator in the IteratorChain has a remaining element.
        Specified by:
        hasNext in interface Iterator
        Returns:
        true if elements remain
      • next

        public Object next()
        Returns the next Object of the current Iterator
        Specified by:
        next in interface Iterator
        Returns:
        Object from the current Iterator
        Throws:
        NoSuchElementException - if all the Iterators are exhausted
      • remove

        public 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:
        remove in interface Iterator
        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.