I don't see any reason to limit this to Integers. The solution is can be trivially genericized.
IteratorOfIterator is a clumsy name. By analogy with Python's itertools.chain(), I suggest calling this class ChainIterator<T>. You can rename the iteratorOfIterator private variable accordingly, too.
I suggest adding an alternate constructor that takes an Iterable<Iterator<T>>, for convenience.
The hasNext() method seems fine. As for next(), the message in the NoSuchElementException that you throw seems a bit weird; I would just omit it.
With not much extra effort, you can add support for remove().
public class ChainIterator<T> implements Iterator<T> {
private final Iterator<Iterator<T>> chain;
private Iterator<T> currentIterator;
private Iterator<T> lastIterator;
public ChainIterator(Iterable<Iterator<T>> iterable) {
this(iterable.iterator());
}
public ChainIterator(Iterator<Iterator<T>> iterator) {
this.chain = iterator;
}
@Override
public boolean hasNext() {
while (currentIterator == null || !currentIterator.hasNext()) {
if (!chain.hasNext()) return false;
currentIterator = chain.next();
}
return true;
}
@Override
public T next() {
if (!this.hasNext()) {
this.lastIterator = null; // to disallow remove()
throw new NoSuchElementException();
}
this.lastIterator = currentIterator; // to support remove()
return currentIterator.next();
}
@Override
public void remove() {
if (this.lastIterator == null) {
throw new IllegalStateException();
}
this.lastIterator.remove();
}
}