package org.limewire.collection;
import java.util.Iterator;
/**
* Is a round robin {@link Iterator} for multiple interators.
*
<pre>
LinkedList<Integer> l1 = new LinkedList<Integer>();
LinkedList<Integer> l2 = new LinkedList<Integer>();
for(int i = 0; i < 5; i++){
l1.add(i);
l2.add(i + 80);
}
for(MultiRRIterator<Integer> mRRiterator = new MultiRRIterator<Integer>(l1.iterator(), l2.iterator());
mRRiterator.hasNext();)
System.out.println(mRRiterator.next());
Output:
0
80
1
81
2
82
3
83
4
84
</pre>
*/
public class MultiRRIterator<T> extends MultiIterator<T> {
public MultiRRIterator(Iterator<? extends T> i1) {
super(i1);
current = iterators.length - 1;
}
public MultiRRIterator(Iterator<? extends T> i1, Iterator<? extends T> i2) {
super(i1, i2);
current = iterators.length - 1;
}
public MultiRRIterator(Iterator<? extends T> i1, Iterator<? extends T> i2, Iterator<? extends T> i3) {
super(i1, i2, i3);
current = iterators.length - 1;
}
public MultiRRIterator(Iterator<? extends T> i1, Iterator<? extends T> i2, Iterator<? extends T> i3, Iterator<? extends T> i4) {
super(i1, i2, i3, i4);
current = iterators.length - 1;
}
public MultiRRIterator(Iterator<? extends T> ... iterators ) {
super(iterators);
current = iterators.length - 1;
}
@Override
protected void positionCurrent() {
int steps = 0;
while (steps <= iterators.length) {
if (current == iterators.length-1)
current = -1;
if (iterators[++current].hasNext())
break;
steps++;
}
}
}