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

net.intelie.pipes.util.ConcatIterable Maven / Gradle / Ivy

There is a newer version: 0.25.5
Show newest version
package net.intelie.pipes.util;

import java.io.Serializable;
import java.util.Arrays;
import java.util.Iterator;
import java.util.NoSuchElementException;

public class ConcatIterable implements Iterable, Serializable {
    private static final long serialVersionUID = 1L;

    private final Iterable> iterables;

    public ConcatIterable(Iterable> iterables) {
        this.iterables = iterables;
    }

    public static  ConcatIterable create(Iterable... iterables) {
        return new ConcatIterable(Arrays.asList(iterables));
    }

    @Override
    public Iterator iterator() {
        return new ConcatIterator();
    }

    @Override
    public String toString() {
        return "(" + Iterables.join(" ++ ", iterables) + ")";
    }

    private class ConcatIterator implements Iterator, Serializable {
        private static final long serialVersionUID = 1L;

        private final Iterator> parent;
        private Iterator current;

        public ConcatIterator() {
            parent = iterables.iterator();
            current = null;
        }

        @Override
        public boolean hasNext() {
            if (currentHasNext())
                return true;
            while (parent.hasNext() && !currentHasNext()) {
                Iterable next = parent.next();
                if (next != null)
                    current = next.iterator();
            }
            return currentHasNext();
        }

        private boolean currentHasNext() {
            return current != null && current.hasNext();
        }

        @Override
        public T next() {
            if (!hasNext())
                throw new NoSuchElementException();
            return current.next();
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy