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.