package org.osgl.util;
import org.osgl.$;
import java.util.Collection;
import java.util.Iterator;
/**
* Created with IntelliJ IDEA.
* User: luog
* Date: 9/11/13
* Time: 5:20 PM
* To change this template use File | Settings | File Templates.
*/
class FlatMappedSeq<T, R> extends SequenceBase<R> {
private Iterable<? extends T> itr;
private $.F1<? super T, ? extends Iterable<? extends R>> mapper;
FlatMappedSeq(Iterable<? extends T> itr, $.Function<? super T, ? extends Iterable<? extends R>> mapper) {
E.NPE(itr, mapper);
this.itr = itr;
this.mapper = $.f1(mapper);
}
@Override
public int size() throws UnsupportedOperationException {
if (itr instanceof Collection) {
return ((Collection)itr).size();
}
throw new UnsupportedOperationException();
}
@Override
public Iterator<R> iterator() {
return Iterators.flatMap(itr.iterator(), mapper);
}
static <T, R> C.Sequence<R>
of(Iterable<? extends T> itr, $.Function<? super T, ? extends Iterable<? extends R>> mapper) {
return new FlatMappedSeq(itr, mapper);
}
}