I have written a wrapper for Java's Iterator
class using Java 7, which is designed to only iterate items that match a certain filter.
When the filter is null, all items should be iterated.
Filter.java
public interface Filter<T> {
boolean apply(T type);
}
FilteredIterator.java
import java.util.Iterator;
public class FilteredIterator<E> implements Iterator<E> {
private Iterator<E> iterator;
private Filter<E> filter;
private E iteratorNext;
private boolean iteratorHasNext;
public FilteredIterator(Iterator<E> iterator, Filter<E> filter) {
this.iterator = iterator;
this.filter = filter;
findNextValid();
}
private void findNextValid() {
iteratorHasNext = iterator.hasNext();
while (iterator.hasNext()) {
iteratorNext = iterator.next();
if (filter == null || filter.apply(iteratorNext)) {
iteratorHasNext = true;
break;
}
}
}
@Override
public boolean hasNext() {
return iteratorHasNext;
}
@Override
public E next() {
E nextValue = iteratorNext;
findNextValid();
return nextValue;
}
@Override
public void remove() {
iterator.remove();
}
}
Is there anything I can improve on here? I'm not all that fond of findNextValid
's implementation but I don't know what I can do to improve it.