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

be.bagofwords.iterator.InterleavedIteratorOfIterators Maven / Gradle / Ivy


package be.bagofwords.iterator;

import java.util.List;

public class InterleavedIteratorOfIterators extends CloseableIterator {

    private final List> iterators;
    private int currPos;
    private U next;

    public InterleavedIteratorOfIterators(List> iterators) {
        this.iterators = iterators;
        this.currPos = 0;
        next = findNext();
    }

    private U findNext() {
        U result = null;
        for (int i = 0; i < iterators.size(); i++) {
            if (iterators.get(currPos).hasNext()) {
                result = iterators.get(currPos).next();
                break;
            } else {
                currPos = (currPos + 1) % iterators.size();
            }
        }
        currPos = (currPos + 1) % iterators.size();
        return result;
    }

    @Override
    public boolean hasNext() {
        return next != null;
    }

    @Override
    public U next() {
        U result = next;
        next = findNext();
        return result;
    }

    @Override
    public void closeInt() {
        for (CloseableIterator iterator : iterators) {
            iterator.close();
        }
    }

}