package org.limewire.collection;
import java.util.Iterator;
/**
* Provides an iterator that iterates over two other iterators, in order.
*
<pre>
LinkedList<String> l1 = new LinkedList<String>();
LinkedList<String> l2 = new LinkedList<String>();
for(int i = 0; i < 5; i++){
l1.add(String.valueOf(i));
l2.add(String.valueOf(i + 10));
}
for(DualIterator<String> di =
new DualIterator<String>(l1.iterator(), l2.iterator()); di.hasNext();)
System.out.println(di.next());
Output:
0
1
2
3
4
10
11
12
13
14
</pre>
*/
public class DualIterator<T> implements Iterator<T> {
/**
* The primary iterator.
*/
private final Iterator<T> i1;
/**
* The secondary iterator.
*/
private final Iterator<T> i2;
/**
* Whether or not you have reached the secondary iterator.
*/
private boolean onOne;
/**
* Constructs a new DualIterator backed by two iterators.
*/
public DualIterator(Iterator<T> a, Iterator<T> b) {
i1 = a; i2 = b;
onOne = true;
}
/**
* Determines if there are any elements left in either iterator.
*/
public boolean hasNext() {
return i1.hasNext() || i2.hasNext();
}
/**
* Retrieves the next element from the current backing iterator.
*/
public T next() {
if(i1.hasNext())
return i1.next();
else {
onOne = false;
return i2.next();
}
}
/**
* Removes the element from the current backing iterator.
*/
public void remove() {
if(onOne)
i1.remove();
else
i2.remove();
}
}