package com.googlecode.totallylazy.iterators; import java.util.Iterator; public class FlattenIterator<T> extends StatefulIterator<T> { private final Iterator<? extends Iterator<? extends T>> iterator; private Iterator<? extends T> currentIterator = new EmptyIterator<T>(); public FlattenIterator(Iterator<? extends Iterator<? extends T>> iterator) { this.iterator = iterator; } public T getNext() { Iterator<? extends T> iterator = getCurrentIterator(); if (iterator.hasNext()) { return iterator.next(); } return finished(); } public Iterator<? extends T> getCurrentIterator() { while (!currentIterator.hasNext()){ if(!iterator.hasNext()){ return new EmptyIterator<T>(); } currentIterator = iterator.next(); } return currentIterator; } }