diff --git a/Task_A/src/Enumerable.java b/Task_A/src/Enumerable.java index 177bce922b7d0268b8951c08ba5690c36647aeb1..e6644079059aacc809cf2fc8bc7b3e0b4cea95e8 100644 --- a/Task_A/src/Enumerable.java +++ b/Task_A/src/Enumerable.java @@ -6,30 +6,37 @@ import java.util.Iterator; public class Enumerable<T> implements Iterable<T> { private Iterator<T> iterator; + private Collection<T> collection; public Enumerable(Collection<T> collection) { + this.collection = collection; this.iterator = collection.iterator(); } Enumerable<T> where(IPredicate<T> predicate) { - Iterator<T> oldIterator = iterator; - this.iterator = new Iterator<T>() { + Enumerable<T> enumerable = new Enumerable<T>(this.collection); + + enumerable.iterator = new Iterator<T>() { + Iterator<T> iterator = enumerable.iterator(); @Override public boolean hasNext() { - return oldIterator.hasNext(); + return iterator.hasNext(); } @Override public T next() { - T item = oldIterator.hasNext() ? oldIterator.next() : null; - while (oldIterator.hasNext() && !predicate.accept(item)) { - item = oldIterator.next(); + T item = iterator.hasNext() ? iterator.next() : null; + + while (iterator.hasNext() && !predicate.accept(item)) { + item = iterator.next(); } - return item; + + return predicate.accept(item) ? item : null; } }; - return this; + + return enumerable; } @Override