Class CollatingIterator
- java.lang.Object
-
- org.apache.commons.collections.iterators.CollatingIterator
-
- All Implemented Interfaces:
java.util.Iterator
public class CollatingIterator extends java.lang.Object implements java.util.IteratorProvides an ordered iteration over the elements contained in a collection of ordered Iterators.Given two ordered
IteratorinstancesAandB, thenext()method on this iterator will return the lesser ofA.next()andB.next().- Since:
- Commons Collections 2.1
- Version:
- $Revision: 646777 $ $Date: 2008-04-10 14:33:15 +0200 (Thu, 10 Apr 2008) $
-
-
Field Summary
Fields Modifier and Type Field Description private java.util.ComparatorcomparatorTheComparatorused to evaluate order.private java.util.ArrayListiteratorsThe list ofIterators to evaluate.private intlastReturnedIndex of theiteratorfrom whom the last returned value was obtained.private java.util.ArrayListvaluesNextobjects peeked from each iterator.private java.util.BitSetvalueSetWhether or not eachvalueselement has been set.
-
Constructor Summary
Constructors Constructor Description CollatingIterator()Constructs a newCollatingIterator.CollatingIterator(java.util.Comparator comp)Constructs a newCollatingIteratorthat will used the specified comparator for ordering.CollatingIterator(java.util.Comparator comp, int initIterCapacity)Constructs a newCollatingIteratorthat will used the specified comparator for ordering and have the specified initial capacity.CollatingIterator(java.util.Comparator comp, java.util.Collection iterators)Constructs a newCollatingIteratorthat will use the specified comparator to provide ordered iteration over the collection of iterators.CollatingIterator(java.util.Comparator comp, java.util.Iterator[] iterators)Constructs a newCollatingIteratorthat will use the specified comparator to provide ordered iteration over the array of iterators.CollatingIterator(java.util.Comparator comp, java.util.Iterator a, java.util.Iterator b)Constructs a newCollatingIteratorthat will use the specified comparator to provide ordered iteration over the two given iterators.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddIterator(java.util.Iterator iterator)Adds the givenIteratorto the iterators being collated.private booleananyHasNext(java.util.ArrayList iters)Returnstrueiff anyIteratorin the given list has a next value.private booleananyValueSet(java.util.BitSet set)Returnstrueiff any bit in the given set istrue.private voidcheckNotStarted()ThrowsIllegalStateExceptionif iteration has started viastart().private voidclear(int i)java.util.ComparatorgetComparator()Gets theComparatorby which collatation occurs.java.util.ListgetIterators()Gets the list of Iterators (unmodifiable).booleanhasNext()Returnstrueif any child iterator has remaining elements.private intleast()java.lang.Objectnext()Returns the next ordered element from a child iterator.voidremove()Removes the last returned element from the child iterator that produced it.private booleanset(int i)voidsetComparator(java.util.Comparator comp)Sets theComparatorby which collation occurs.voidsetIterator(int index, java.util.Iterator iterator)Sets the iterator at the given index.private voidstart()Initializes the collating state if it hasn't been already.
-
-
-
Field Detail
-
comparator
private java.util.Comparator comparator
TheComparatorused to evaluate order.
-
iterators
private java.util.ArrayList iterators
The list ofIterators to evaluate.
-
values
private java.util.ArrayList values
Nextobjects peeked from each iterator.
-
valueSet
private java.util.BitSet valueSet
Whether or not eachvalueselement has been set.
-
lastReturned
private int lastReturned
Index of theiteratorfrom whom the last returned value was obtained.
-
-
Constructor Detail
-
CollatingIterator
public CollatingIterator()
Constructs a newCollatingIterator. Natural sort order will be used, and child iterators will have to be manually added using theaddIterator(Iterator)method.
-
CollatingIterator
public CollatingIterator(java.util.Comparator comp)
Constructs a newCollatingIteratorthat will used the specified comparator for ordering. Child iterators will have to be manually added using theaddIterator(Iterator)method.- Parameters:
comp- the comparator to use to sort, or null to use natural sort order
-
CollatingIterator
public CollatingIterator(java.util.Comparator comp, int initIterCapacity)Constructs a newCollatingIteratorthat will used the specified comparator for ordering and have the specified initial capacity. Child iterators will have to be manually added using theaddIterator(Iterator)method.- Parameters:
comp- the comparator to use to sort, or null to use natural sort orderinitIterCapacity- the initial capacity for the internal list of child iterators
-
CollatingIterator
public CollatingIterator(java.util.Comparator comp, java.util.Iterator a, java.util.Iterator b)Constructs a newCollatingIteratorthat will use the specified comparator to provide ordered iteration over the two given iterators.- Parameters:
comp- the comparator to use to sort, or null to use natural sort ordera- the first child ordered iteratorb- the second child ordered iterator- Throws:
java.lang.NullPointerException- if either iterator is null
-
CollatingIterator
public CollatingIterator(java.util.Comparator comp, java.util.Iterator[] iterators)Constructs a newCollatingIteratorthat will use the specified comparator to provide ordered iteration over the array of iterators.- Parameters:
comp- the comparator to use to sort, or null to use natural sort orderiterators- the array of iterators- Throws:
java.lang.NullPointerException- if iterators array is or contains null
-
CollatingIterator
public CollatingIterator(java.util.Comparator comp, java.util.Collection iterators)Constructs a newCollatingIteratorthat will use the specified comparator to provide ordered iteration over the collection of iterators.- Parameters:
comp- the comparator to use to sort, or null to use natural sort orderiterators- the collection of iterators- Throws:
java.lang.NullPointerException- if the iterators collection is or contains nulljava.lang.ClassCastException- if the iterators collection contains an element that's not anIterator
-
-
Method Detail
-
addIterator
public void addIterator(java.util.Iterator iterator)
Adds the givenIteratorto the iterators being collated.- Parameters:
iterator- the iterator to add to the collation, must not be null- Throws:
java.lang.IllegalStateException- if iteration has startedjava.lang.NullPointerException- if the iterator is null
-
setIterator
public void setIterator(int index, java.util.Iterator iterator)Sets the iterator at the given index.- Parameters:
index- index of the Iterator to replaceiterator- Iterator to place at the given index- Throws:
java.lang.IndexOutOfBoundsException- if index < 0 or index > size()java.lang.IllegalStateException- if iteration has startedjava.lang.NullPointerException- if the iterator is null
-
getIterators
public java.util.List getIterators()
Gets the list of Iterators (unmodifiable).- Returns:
- the unmodifiable list of iterators added
-
getComparator
public java.util.Comparator getComparator()
Gets theComparatorby which collatation occurs.
-
setComparator
public void setComparator(java.util.Comparator comp)
Sets theComparatorby which collation occurs.- Throws:
java.lang.IllegalStateException- if iteration has started
-
hasNext
public boolean hasNext()
Returnstrueif any child iterator has remaining elements.- Specified by:
hasNextin interfacejava.util.Iterator- Returns:
- true if this iterator has remaining elements
-
next
public java.lang.Object next() throws java.util.NoSuchElementExceptionReturns the next ordered element from a child iterator.- Specified by:
nextin interfacejava.util.Iterator- Returns:
- the next ordered element
- Throws:
java.util.NoSuchElementException- if no child iterator has any more elements
-
remove
public void remove()
Removes the last returned element from the child iterator that produced it.- Specified by:
removein interfacejava.util.Iterator- Throws:
java.lang.IllegalStateException- if there is no last returned element, or if the last returned element has already been removed
-
start
private void start()
Initializes the collating state if it hasn't been already.
-
set
private boolean set(int i)
Sets thevaluesandvalueSetattributes at position i to the next value of theiteratorat position i, or clear them if the ith iterator has no next value.- Returns:
- false iff there was no value to set
-
clear
private void clear(int i)
-
checkNotStarted
private void checkNotStarted() throws java.lang.IllegalStateExceptionThrowsIllegalStateExceptionif iteration has started viastart().- Throws:
java.lang.IllegalStateException- if iteration started
-
least
private int least()
- Throws:
java.lang.IllegalStateException
-
anyValueSet
private boolean anyValueSet(java.util.BitSet set)
Returnstrueiff any bit in the given set istrue.
-
anyHasNext
private boolean anyHasNext(java.util.ArrayList iters)
Returnstrueiff anyIteratorin the given list has a next value.
-
-