You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2020/01/19 16:16:06 UTC

[isis] 01/07: ISIS-2223: polish _NullSafe.stream(final Enumeration enumeration)

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

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 6c3b60f17f18859059cd2e44238a471d29ea5035
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sun Jan 19 16:50:31 2020 +0100

    ISIS-2223: polish _NullSafe.stream(final Enumeration<T> enumeration)
---
 .../isis/core/commons/internal/base/_NullSafe.java | 25 +++++++++++++---------
 1 file changed, 15 insertions(+), 10 deletions(-)

diff --git a/core/commons/src/main/java/org/apache/isis/core/commons/internal/base/_NullSafe.java b/core/commons/src/main/java/org/apache/isis/core/commons/internal/base/_NullSafe.java
index 39f9677..cab636f 100644
--- a/core/commons/src/main/java/org/apache/isis/core/commons/internal/base/_NullSafe.java
+++ b/core/commons/src/main/java/org/apache/isis/core/commons/internal/base/_NullSafe.java
@@ -26,6 +26,7 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.Spliterator;
 import java.util.Spliterators;
+import java.util.function.Consumer;
 import java.util.stream.Stream;
 import java.util.stream.StreamSupport;
 
@@ -124,20 +125,24 @@ public final class _NullSafe {
      */
     public static <T> Stream<T> stream(final Enumeration<T> enumeration){
         return enumeration!=null
-                ? stream(toIterator(enumeration))
+                ? StreamSupport.stream(toSpliterator(enumeration), /*parallel*/false)
                         : Stream.empty();
     }
 
-    // [ahuber] not public, since one time use of enumeration only!
-    private static <T> Iterator<T> toIterator(final Enumeration<T> e){
-        return new Iterator<T>() {
-            @Override
-            public T next() {
-                return e.nextElement();
+    // not public, used internally for stream(Enumeration) only
+    private static <T> Spliterator<T> toSpliterator(final Enumeration<T> e){
+        return new Spliterators.AbstractSpliterator<T>(Long.MAX_VALUE, Spliterator.ORDERED) {
+            public boolean tryAdvance(Consumer<? super T> action) {
+                if(e.hasMoreElements()) {
+                    action.accept(e.nextElement());
+                    return true;
+                }
+                return false;
             }
-            @Override
-            public boolean hasNext() {
-                return e.hasMoreElements();
+            public void forEachRemaining(Consumer<? super T> action) {
+                while(e.hasMoreElements()) {
+                    action.accept(e.nextElement());
+                }
             }
         };
     }