01: package uk.co.jezuk.mango.iterators;
02:
03: /**
04: * A <code>SkippingIterator</code> enumerates a sequence,
05: * stepping over the elements
06: * that match the supplied <code>Predicate</code>.
07: *
08: * @see PredicatedIterator
09: * @author Jez Higgins, jez@jezuk.co.uk
10: * @version $Id: SkippingIterator.java 95 2004-05-25 20:56:38Z jez $
11: */
12: public class SkippingIterator implements java.util.Iterator {
13: public SkippingIterator(java.util.Iterator iterator,
14: uk.co.jezuk.mango.Predicate predicate) {
15: iter_ = iterator;
16: pred_ = predicate;
17:
18: findNext();
19: } // SkippingIterator
20:
21: public boolean hasNext() {
22: return (next_ != null);
23: } // hasNext
24:
25: public Object next() {
26: Object current = next_;
27: findNext();
28: return current;
29: } // next
30:
31: public void remove() {
32: throw new UnsupportedOperationException(
33: "uk.co.jezuk.mango.SkippingIterator does not support the remove method");
34: } // remove
35:
36: private void findNext() {
37: next_ = null;
38: while (iter_.hasNext() && next_ == null) {
39: Object candidate = iter_.next();
40: if (!pred_.test(candidate))
41: next_ = candidate;
42: } // while
43: } // findNext
44:
45: ////////////////////////
46: private java.util.Iterator iter_;
47: private uk.co.jezuk.mango.Predicate pred_;
48: private Object next_;
49: } // SkippingIterator
|