package com.mysema.util;
import java.util.Iterator;
import java.util.NoSuchElementException;
import javax.annotation.Nullable;
public class PairIterator<T> implements Iterator<T> {
private final Iterator<T> firstIterator;
@Nullable
private Iterator<T> secondIterator;
private final Iterable<T> second;
@Nullable
private Boolean hasNext;
@Nullable
private T value;
public PairIterator(Iterable<T> first, Iterable<T> second) {
this.firstIterator = first.iterator();
this.second = second;
}
@Override
public boolean hasNext() {
while (hasNext == null) {
produceNext();
}
return hasNext.booleanValue();
}
@Override
public T next() {
while (hasNext == null) {
produceNext();
}
if (hasNext.booleanValue()) {
hasNext = null;
return value;
} else {
throw new NoSuchElementException();
}
}
private void produceNext() {
hasNext = true;
// first
if (secondIterator == null || !secondIterator.hasNext()) {
secondIterator = null;
if (!firstIterator.hasNext()) {
hasNext = false;
return;
} else {
firstIterator.next();
}
}
// second
if (secondIterator == null) {
secondIterator = second.iterator();
if (!secondIterator.hasNext()) {
hasNext = null;
return;
}
}
value = secondIterator.next();
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
}