package org.osgl.util; import org.osgl.$; import java.util.Iterator; /** * Created with IntelliJ IDEA. * User: luog * Date: 22/10/13 * Time: 9:45 PM * To change this template use File | Settings | File Templates. */ class IndexFilteredIterator<T> extends StatefulIterator<T> { private final Iterator<? extends T> itr_; private final $.Predicate<Integer> filter_; private int cursor; public IndexFilteredIterator(Iterator<? extends T> iterator, $.Function<Integer, Boolean> filter) { E.NPE(iterator, filter); itr_ = iterator; filter_ = $.predicate(filter); } private boolean rawHasNext() { return itr_.hasNext(); } private T rawNext() { cursor++; return itr_.next(); } @Override protected $.Option<T> getCurrent() { while (rawHasNext()) { int curCursor = cursor; T t = rawNext(); if (filter_.test(curCursor)) { return $.some(t); } } return $.none(); } }