You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by je...@apache.org on 2018/06/14 13:14:53 UTC

[sling-whiteboard] 01/02: refactor of ResourceStream

This is an automated email from the ASF dual-hosted git repository.

jeb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-whiteboard.git

commit 5d9ce33b126f24e16082500a8f76369ef7fc8373
Author: Bertrand Delacretaz <bd...@apache.org>
AuthorDate: Tue Jun 12 22:47:36 2018 +0200

    refactor of ResourceStream
---
 .../sling/resource/filter/ResourceStream.java      | 34 ++++++++++++----------
 1 file changed, 18 insertions(+), 16 deletions(-)

diff --git a/resource-filter/src/main/java/org/apache/sling/resource/filter/ResourceStream.java b/resource-filter/src/main/java/org/apache/sling/resource/filter/ResourceStream.java
index 2a6f865..db4d78a 100644
--- a/resource-filter/src/main/java/org/apache/sling/resource/filter/ResourceStream.java
+++ b/resource-filter/src/main/java/org/apache/sling/resource/filter/ResourceStream.java
@@ -13,10 +13,12 @@
  */
 package org.apache.sling.resource.filter;
 
+import java.util.Deque;
 import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.NoSuchElementException;
 import java.util.Spliterator;
 import java.util.Spliterators;
-import java.util.Stack;
 import java.util.function.Predicate;
 import java.util.stream.Stream;
 import java.util.stream.StreamSupport;
@@ -47,16 +49,14 @@ public class ResourceStream {
      * @return {@code Stream<Resource>} of unknown size.
      */
     public Stream<Resource> stream(Predicate<Resource> branchSelector) {
-        final Resource resource = this.resource;
+
         return StreamSupport.stream(Spliterators.spliteratorUnknownSize(new Iterator<Resource>() {
 
-            private final Stack<Iterator<Resource>> resources = new Stack<Iterator<Resource>>();
-            private Resource current;
-            private Iterator<Resource> iterator;
+            private final Deque<Iterator<Resource>> resources = new LinkedList<>();
+            private Resource current = resource;
 
             {
                 resources.push(resource.getChildren().iterator());
-                current = resource;
             }
 
             @Override
@@ -69,28 +69,30 @@ public class ResourceStream {
 
             @Override
             public Resource next() {
+                if (current == null) {
+                    seek();
+                }
+                if (current == null) {
+                    throw new NoSuchElementException();
+                }
                 Resource next = current;
                 current = null;
                 return next;
             }
 
             private boolean seek() {
-                while (true) {
-                    if (resources.isEmpty()) {
-                        return false;
-                    }
-                    iterator = resources.peek();
-                    if (!iterator.hasNext()) {
-                        resources.pop();
-                    } else {
+                while (!resources.isEmpty()) {
+                    Iterator<Resource> iterator = resources.peek();
+                    if (iterator.hasNext()) {
                         current = iterator.next();
                         if (branchSelector.test(current)) {
                             resources.push(current.getChildren().iterator());
-                            break;
                         }
+                        return true;
                     }
+                    resources.pop();
                 }
-                return true;
+                return false;
             }
 
         }, Spliterator.ORDERED | Spliterator.IMMUTABLE), false);

-- 
To stop receiving notification emails like this one, please contact
jeb@apache.org.