package org.neo4j.helpers.collection; import java.util.Iterator; /** * Combining one or more {@link Iterator}s, making them look like they were * one big iterator. All iteration/combining is done lazily. * * @param <T> the type of items in the iteration. */ public class CombiningIterator<T> extends PrefetchingIterator<T> { private Iterator<Iterator<T>> iterators; private Iterator<T> currentIterator; public CombiningIterator( Iterable<Iterator<T>> iterators ) { this.iterators = iterators.iterator(); } @Override protected T fetchNextOrNull() { if ( currentIterator == null || !currentIterator.hasNext() ) { while ( iterators.hasNext() ) { currentIterator = iterators.next(); if ( currentIterator.hasNext() ) { break; } } } return currentIterator != null && currentIterator.hasNext() ? currentIterator.next() : null; } }