SLING-7540 LastIterator improvements

Removed pre-determination of the last item to make it more "lazy"
diff --git a/src/main/java/org/apache/sling/query/iterator/LastIterator.java b/src/main/java/org/apache/sling/query/iterator/LastIterator.java
index b02621f..2316b97 100644
--- a/src/main/java/org/apache/sling/query/iterator/LastIterator.java
+++ b/src/main/java/org/apache/sling/query/iterator/LastIterator.java
@@ -20,60 +20,42 @@
 package org.apache.sling.query.iterator;
 
 import java.util.Iterator;
-import java.util.ListIterator;
 
 import org.apache.sling.query.api.internal.Option;
-import org.apache.sling.query.util.LazyList;
 
+/**
+ * 
+ * 
+ *
+ * @param <T>
+ */
 public class LastIterator<T> extends AbstractIterator<Option<T>> {
 
-	private final LazyList<Option<T>> lazyList;
+	private final Iterator<Option<T>> iterator;
 
-	private final ListIterator<Option<T>> iterator;
-
-	private boolean finished;
-
-	private boolean initialized;
-
-	private int lastIndex = -1;
+	private Option<T> previous;
 
 	public LastIterator(Iterator<Option<T>> iterator) {
-		this.lazyList = new LazyList<Option<T>>(iterator);
-		this.iterator = lazyList.listIterator();
+		this.iterator = iterator;
 	}
 
 	@Override
 	protected Option<T> getElement() {
-		if (finished) {
-			return null;
-		}
-
-		initializeLastIndex();
-
-		Option<T> candidate;
-		if (iterator.hasNext()) {
-			candidate = iterator.next();
-		} else {
-			finished = true;
-			return null;
-		}
-		if (iterator.previousIndex() == lastIndex) {
-			finished = true;
+		Option<T> candidate = previous;
+		
+		if (!iterator.hasNext()) {
+			previous = null;
 			return candidate;
-		} else {
-			return Option.empty(candidate.getArgumentId());
-		}
-	}
-
-	private void initializeLastIndex() {
-		ListIterator<Option<T>> i = lazyList.listIterator();
-		if (!initialized) {
-			while (i.hasNext()) {
-				if (!i.next().isEmpty()) {
-					lastIndex = i.previousIndex();
-				}
+		} 
+		
+		if (candidate == null) {
+			candidate = iterator.next();
+			if (!iterator.hasNext()) {
+				return candidate;
 			}
 		}
-		initialized = true;
+		previous = iterator.next();
+		return Option.empty(candidate.getArgumentId());
 	}
+
 }