1 16 package org.apache.commons.collections.iterators; 17 18 import java.util.Iterator ; 19 import java.util.NoSuchElementException ; 20 21 import org.apache.commons.collections.Predicate; 22 23 35 public class FilterIterator implements Iterator { 36 37 38 private Iterator iterator; 39 40 private Predicate predicate; 41 42 private Object nextObject; 43 44 private boolean nextObjectSet = false; 45 46 51 public FilterIterator() { 52 super(); 53 } 54 55 61 public FilterIterator(Iterator iterator) { 62 super(); 63 this.iterator = iterator; 64 } 65 66 73 public FilterIterator(Iterator iterator, Predicate predicate) { 74 super(); 75 this.iterator = iterator; 76 this.predicate = predicate; 77 } 78 79 86 public boolean hasNext() { 87 if (nextObjectSet) { 88 return true; 89 } else { 90 return setNextObject(); 91 } 92 } 93 94 101 public Object next() { 102 if (!nextObjectSet) { 103 if (!setNextObject()) { 104 throw new NoSuchElementException (); 105 } 106 } 107 nextObjectSet = false; 108 return nextObject; 109 } 110 111 122 public void remove() { 123 if (nextObjectSet) { 124 throw new IllegalStateException ("remove() cannot be called"); 125 } 126 iterator.remove(); 127 } 128 129 135 public Iterator getIterator() { 136 return iterator; 137 } 138 139 145 public void setIterator(Iterator iterator) { 146 this.iterator = iterator; 147 } 148 149 155 public Predicate getPredicate() { 156 return predicate; 157 } 158 159 164 public void setPredicate(Predicate predicate) { 165 this.predicate = predicate; 166 } 167 168 173 private boolean setNextObject() { 174 while (iterator.hasNext()) { 175 Object object = iterator.next(); 176 if (predicate.evaluate(object)) { 177 nextObject = object; 178 nextObjectSet = true; 179 return true; 180 } 181 } 182 return false; 183 } 184 } 185 | Popular Tags |