mirror of
https://github.com/mitb-archive/filebot
synced 2024-08-13 17:03:45 -04:00
59 lines
860 B
Java
59 lines
860 B
Java
|
|
package net.filebot.util;
|
|
|
|
|
|
import java.util.Iterator;
|
|
|
|
|
|
public abstract class FilterIterator<S, T> implements Iterator<T> {
|
|
|
|
private final Iterator<S> sourceIterator;
|
|
|
|
|
|
public FilterIterator(Iterable<S> source) {
|
|
this(source.iterator());
|
|
}
|
|
|
|
|
|
public FilterIterator(Iterator<S> sourceIterator) {
|
|
this.sourceIterator = sourceIterator;
|
|
}
|
|
|
|
|
|
@Override
|
|
public boolean hasNext() {
|
|
return peekNext(false) != null;
|
|
}
|
|
|
|
|
|
@Override
|
|
public T next() {
|
|
try {
|
|
return peekNext(true);
|
|
} finally {
|
|
current = null;
|
|
}
|
|
}
|
|
|
|
private T current = null;
|
|
|
|
|
|
private T peekNext(boolean forceNext) {
|
|
while (current == null && (forceNext || (sourceIterator.hasNext()))) {
|
|
current = filter(sourceIterator.next());
|
|
}
|
|
|
|
return current;
|
|
}
|
|
|
|
|
|
protected abstract T filter(S sourceValue);
|
|
|
|
|
|
@Override
|
|
public void remove() {
|
|
sourceIterator.remove();
|
|
}
|
|
|
|
}
|