From 31eaa7589dfc44d5c4d9ff66e4a9c4d6912ae635 Mon Sep 17 00:00:00 2001
From: andlu984 <andlu984@student.liu.se>
Date: Wed, 11 Sep 2019 09:17:17 +0200
Subject: [PATCH] Changed project structure

---
 Task_A/src/Enumerable.java | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/Task_A/src/Enumerable.java b/Task_A/src/Enumerable.java
index 177bce9..1385e4f 100644
--- a/Task_A/src/Enumerable.java
+++ b/Task_A/src/Enumerable.java
@@ -6,14 +6,17 @@ 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.iterator = collection.iterator();
+		this.collection = collection;
 	}
 
 	Enumerable<T> where(IPredicate<T> predicate) {
-		Iterator<T> oldIterator = iterator;
-		this.iterator = new Iterator<T>() {
+		Enumerable<T> enumerable = new Enumerable<>(this.collection);
+		Iterator<T> oldIterator = enumerable.iterator();
+		enumerable.iterator = new Iterator<T>() {
 
 			@Override
 			public boolean hasNext() {
@@ -26,10 +29,13 @@ public class Enumerable<T> implements Iterable<T> {
 				while (oldIterator.hasNext() && !predicate.accept(item)) {
 					item = oldIterator.next();
 				}
-				return item;
+				if (predicate.accept(item)) {
+					return item;
+				}
+				return null;
 			}
 		};
-		return this;
+		return enumerable;
 	}
 
 	@Override
@@ -40,8 +46,9 @@ public class Enumerable<T> implements Iterable<T> {
 	void forEach(IAction<T> action) {
 		while (iterator.hasNext()) {
 			T t = (T) iterator.next();
-			action.perform(t);
+			if (t != null) {
+				action.perform(t);
+			}
 		}
 	}
-
 }
-- 
GitLab