com.softicar.platform.common.container.filter.FilteringIterator Maven / Gradle / Ivy
Show all versions of platform-common Show documentation
package com.softicar.platform.common.container.filter;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.function.Predicate;
/**
* An iterator that filters the elements with respect to a given predicate.
*
* If the sequence contains null elements the predicate must also support
* null values.
*
* @param
* the element type
* @author Oliver Richers
*/
public class FilteringIterator implements Iterator {
private final Iterator iterator;
private final Predicate predicate;
private boolean haveElement;
private T element;
public FilteringIterator(Iterator iterator, Predicate predicate) {
this.iterator = iterator;
this.predicate = predicate;
this.haveElement = false;
this.element = null;
}
@Override
public boolean hasNext() {
while (!haveElement && iterator.hasNext()) {
this.element = iterator.next();
if (predicate.test(element)) {
this.haveElement = true;
}
}
return haveElement;
}
@Override
public T next() {
if (hasNext()) {
this.haveElement = false;
return element;
} else {
throw new NoSuchElementException();
}
}
}