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

io.gsonfire.util.IterableMapper Maven / Gradle / Ivy

package io.gsonfire.util;

import java.util.Iterator;

/**
 * Created by julio on 6/24/15.
 */
public class IterableMapper implements Iterable {

    private final Iterable source;
    private final Mapper mapper;

    private IterableMapper(Iterable source, Mapper mapper) {
        this.source = source;
        this.mapper = mapper;
    }

    @Override
    public Iterator iterator() {
        final Iterator sourceIterator = source.iterator();
        return new Iterator() {
            @Override
            public boolean hasNext() {
                return sourceIterator.hasNext();
            }

            @Override
            public T next() {
                T mapped = mapper.map(sourceIterator.next());
                return mapped;
            }

            @Override
            public void remove() {

            }
        };
    }

    @Override
    public boolean equals(Object o) {
        if(o != null && o instanceof Iterable) {
            Iterator otherIterator = ((Iterable) o).iterator();
            Iterator thisIterator = this.iterator();
            while(thisIterator.hasNext()) {
                if(otherIterator.hasNext()) {
                    Object thisNext = thisIterator.next();
                    Object otherNext = otherIterator.next();
                    if(!areObjectEquals(thisNext, otherNext)) {
                        return false;
                    }
                } else {
                    return false;
                }
            }

            return !otherIterator.hasNext();
        } else {
            return false;
        }
    }

    private static boolean areObjectEquals(Object a, Object b) {
        return (a == b) || (a != null && a.equals(b));
    }

    public static  Iterable create(Iterable source, Mapper mapper) {
        return new IterableMapper(source, mapper);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy