package org.osgl.util; import org.osgl.$; import java.util.Collection; import java.util.Iterator; /** * Created with IntelliJ IDEA. * User: luog * Date: 24/10/13 * Time: 2:05 PM * To change this template use File | Settings | File Templates. */ class MappedTrav<T, R> extends TraversableBase<R> { private final Iterable<? extends T> data; private final $.F1<T, R> mapper_; MappedTrav(Iterable<? extends T> iterable, $.Function<? super T, ? extends R> mapper) { E.NPE(iterable, mapper); data = iterable; mapper_ = $.f1(mapper); } @Override public Iterator<R> iterator() { return Iterators.map(data.iterator(), mapper_); } @Override public int size() throws UnsupportedOperationException { if (data instanceof Collection) { return ((Collection<?>) data).size(); } throw new UnsupportedOperationException(); } public static <T, R> C.Traversable<R> of(Iterable<? extends T> iterable, $.Function<? super T, ? extends R> mapper) { return new MappedTrav<T, R>(iterable, mapper); } }