All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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> 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