X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fde%2Fj32%2Futil%2FFilteredIterator.java;fp=src%2Fmain%2Fjava%2Fde%2Fj32%2Futil%2FFilteredIterator.java;h=585a537967a1821ebceaf3f1c4ec1c770dd8e8dd;hb=4c31953ffe274db62393de67740de5df70b06d33;hp=0000000000000000000000000000000000000000;hpb=5ac05364dc652686046f01849b810da6ffef1192;p=jpim.git diff --git a/src/main/java/de/j32/util/FilteredIterator.java b/src/main/java/de/j32/util/FilteredIterator.java new file mode 100644 index 0000000..585a537 --- /dev/null +++ b/src/main/java/de/j32/util/FilteredIterator.java @@ -0,0 +1,50 @@ +package de.j32.util; + +import java.util.Iterator; +import java.util.NoSuchElementException; + +public class FilteredIterator implements Iterator +{ + Iterator base_; + Filter filter_; + E next_; + boolean hasNext_ = true; + + public FilteredIterator(Iterator base, Filter filter) + { + base_ = base; + filter_ = filter; + advance(); + } + + public E next() + { + if (hasNext_) { + E rv = next_; + advance(); + return rv; + } + else throw new NoSuchElementException(); + } + + public boolean hasNext() + { + return hasNext_; + } + + public void remove() + { + throw new UnsupportedOperationException(); + } + + void advance() + { + while (base_.hasNext()) { + next_ = base_.next(); + if (filter_.match(next_)) return; + } + hasNext_ = false; + next_ = null; + } + +}