Skip to content

Instantly share code, notes, and snippets.

@Mugi4ok
Created October 17, 2017 07:15
Show Gist options
  • Save Mugi4ok/b4e4f86a523bc050870a781c9062c17d to your computer and use it in GitHub Desktop.
Save Mugi4ok/b4e4f86a523bc050870a781c9062c17d to your computer and use it in GitHub Desktop.
import java.util.function.Predicate
class PredicateIterator<T> implements Iterator<T> {
Iterator<T> iterator
Predicate<T> predicate
boolean hasNext = false
T currentElement
T nextElement
PredicateIterator(Iterator<T> iterator, Predicate<T> predicate) {
this.iterator = iterator
this.predicate = predicate
findNext()
}
@Override
boolean hasNext() {
hasNext
}
@Override
T next() {
if (hasNext)
findNext()
}
T findNext() {
if(!iterator.hasNext()) {
hasNext = false
return nextElement
}
while (iterator.hasNext()) {
T element = iterator.next()
if (predicate.test(element)) {
currentElement = nextElement
hasNext = true
nextElement = element
return currentElement
}
}
hasNext = false
nextElement
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment