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

no.motif.iter.FlatMappingIterable Maven / Gradle / Ivy

package no.motif.iter;

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

import no.motif.f.Fn;

class FlatMappingIterable implements Iterable, Serializable {


    private final Iterable elements;
    private final Fn> fn;

    public FlatMappingIterable(Iterable elements, Fn> fn) {
        this.elements = elements;
        this.fn = fn;
    }

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

    private final class FlatMappingIterator extends ReadOnlyIterator {
        Iterator iterator = elements.iterator();
        Iterator mapped = EmptyIterator.instance();

        @Override
        public boolean hasNext() {
            if (!mapped.hasNext() && iterator.hasNext()) {
                mapped = fn.$(iterator.next()).iterator();
            }
            return mapped.hasNext();
        }

        @Override
        public O next() {
            return mapped.next();
        }
    }

}