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

com.maxifier.mxcache.clean.MappingIterable Maven / Gradle / Ivy

/*
 * Copyright (c) 2008-2014 Maxifier Ltd. All Rights Reserved.
 */
package com.maxifier.mxcache.clean;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;

import java.util.Iterator;
import java.util.NoSuchElementException;

/**
 * @author Alexander Kochurov ([email protected])
 */
public abstract class MappingIterable implements Iterable {
    private final Iterable iterable;

    protected MappingIterable(@Nonnull Iterable iterable) {
        this.iterable = iterable;
    }

    @Override
    public Iterator iterator() {
        return new MappingIterator(iterable.iterator());
    }

    public abstract T map(@Nullable F f);

    private final class MappingIterator implements Iterator {
        private final Iterator iterator;
        private T next;

        private MappingIterator(Iterator iterator) {
            this.iterator = iterator;
        }

        @Override
        public boolean hasNext() {
            while (next == null && iterator.hasNext()) {
                next = map(iterator.next());
            }
            return next != null;
        }

        @Override
        public T next() {
            if (!hasNext()) {
                throw new NoSuchElementException();
            }
            T res = next;
            next = null;
            return res;
        }

        @Override
        public void remove() {
            iterator.remove();
        }
    }

    @Override
    public String toString() {
        return iterable.toString();
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy