From 1ddc268fa686d8b3262175ca2979f3a4c6751803 Mon Sep 17 00:00:00 2001 From: nikgr117 <nikgr117@tlhw-4-4.ad.liu.se> Date: Mon, 16 Sep 2019 22:41:05 +0200 Subject: [PATCH] Make where-method non-destructive --- Task_A/src/Enumerable.java | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/Task_A/src/Enumerable.java b/Task_A/src/Enumerable.java index 177bce9..e664407 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 -- GitLab