26ad1f06fee047e725f432dc50b6682f2fc33573
[jpim.git] / src / de / j32 / util / FilteredIterator.java
1 package de.j32.util;
2
3 import java.util.Iterator;
4 import java.util.NoSuchElementException;
5
6
7 public class FilteredIterator<E>
8         implements Iterator<E>
9 {
10         Iterator<E> base_;
11         Filter<E> filter_;
12         E next_;
13         boolean hasNext_ = true;
14
15         public FilteredIterator(Iterator<E> base, Filter<E> filter)
16         {
17                 base_ = base;
18                 filter_ = filter;
19                 advance();
20         }
21         
22         public E next()
23         {
24                 if (hasNext_) {
25                         E rv = next_;
26                         advance();
27                         return rv;
28                 }
29                 else 
30                         throw new NoSuchElementException();
31         }
32         
33         public boolean hasNext()
34         {
35                 return hasNext_;
36         }
37         
38         public void remove()
39         {
40                 throw new UnsupportedOperationException();
41         }
42         
43         void advance()
44         {
45                 while (base_.hasNext()) {
46                         next_ = base_.next();
47                         if (filter_.match(next_))
48                                 return;
49                 }
50                 hasNext_ = false;
51                 next_ = null;
52         }
53
54 }