
com.puresoltechnologies.streaming.CompositeStreamIterator Maven / Gradle / Ivy
package com.puresoltechnologies.streaming;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Objects;
/**
* This composite iterators take multiple iterators and handles them as one
* whole to the outside.
*
* @author Rick-Rainer Ludwig
*
* @param
* is the element type of the iterator.
*/
public class CompositeStreamIterator extends AbstractStreamIterator {
private final List> iterators = new ArrayList>();
private Iterator currentIterator = null;
public CompositeStreamIterator(Iterator... iterators) {
Objects.requireNonNull(iterators, "Iterators must not be null");
for (Iterator iterator : iterators) {
this.iterators.add(iterator);
}
}
public CompositeStreamIterator(Collection extends Iterator> iterators) {
Objects.requireNonNull(iterators, "Iterators must not be null");
this.iterators.addAll(iterators);
}
@Override
protected T findNext() {
while ((currentIterator == null) || (!currentIterator.hasNext())) {
if (iterators.size() == 0) {
currentIterator = null;
return null;
}
currentIterator = iterators.remove(0);
}
return currentIterator.next();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy