You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2015/11/14 15:42:14 UTC

[06/13] jena git commit: JENA-1067 : Rework IteratorTruncate

JENA-1067 : Rework IteratorTruncate

Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/e86aad72
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/e86aad72
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/e86aad72

Branch: refs/heads/master
Commit: e86aad723a8b25626d350b90d396d3a8f06384cf
Parents: d8bae48
Author: Andy Seaborne <an...@apache.org>
Authored: Sat Nov 14 11:47:41 2015 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Sat Nov 14 11:47:41 2015 +0000

----------------------------------------------------------------------
 .../jena/atlas/iterator/IteratorTruncate.java   | 75 ++++++++------------
 1 file changed, 29 insertions(+), 46 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/e86aad72/jena-base/src/main/java/org/apache/jena/atlas/iterator/IteratorTruncate.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/iterator/IteratorTruncate.java b/jena-base/src/main/java/org/apache/jena/atlas/iterator/IteratorTruncate.java
index 86ef52e..0bd4b54 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/iterator/IteratorTruncate.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/iterator/IteratorTruncate.java
@@ -19,61 +19,44 @@
 package org.apache.jena.atlas.iterator;
 
 import java.util.Iterator ;
-import java.util.NoSuchElementException ;
+import java.util.function.Predicate ;
 
-/** Iterate while a condition return true, then stop */
-public class IteratorTruncate<T> implements Iterator<T>
-{
-    static public interface Test { boolean accept(Object object) ; }
-    private Test test ;
-    private T slot = null ;
-    private boolean active = true ;
+import org.apache.jena.atlas.iterator.Iter ;
+import org.apache.jena.atlas.iterator.IteratorSlotted ;
+
+/** Iterate while a condition is true, then stop. 
+ *  This iterator does not touch any elements after the first
+ *  where the predicate is false.
+ */
+final
+public class IteratorTruncate<T> extends IteratorSlotted<T> {
+    private final Predicate<T> predicate ;
     private Iterator<T> iter ;
 
-    public IteratorTruncate (Test test, Iterator<T> iter)
-    { this.test = test ; this.iter = iter ; }
+    public IteratorTruncate(Iterator<T> iter, Predicate<T> predicate) {
+        this.iter = iter ;
+        this.predicate = predicate ;
+    }
 
     @Override
-    public boolean hasNext()
-    {
-        if ( ! active ) return false ;
-        if ( slot != null )
-            return true ;
-
-        if ( ! iter.hasNext() )
-        {
-            active = false ;
-            return false ;
-        }
-
-        slot = iter.next() ;
-        if ( test.accept(slot) )
-            return true ;
-        // Once the test goes false, no longer yield anything.
-        Iter.close(iter) ;
-        active = false ;
-        iter = null ;
-        slot = null ;
-        return false ;
+    protected boolean hasMore() {
+        // OK to return true then deny it in moveToNext by returning null.
+        return iter.hasNext() ;
     }
 
     @Override
-    public T next()
-    {
-        if ( ! hasNext() )
-            throw new NoSuchElementException("IteratorTruncate.next") ;    
-        T x = slot ;
-        slot = null ;
-        return x ;
+    protected T moveToNext() {
+        // Add IteratorSlotted.inspect(element).
+        if ( ! iter.hasNext() )
+            return null ;
+        T item = iter.next() ;
+        if ( ! predicate.test(item) )
+            return null ;
+        return item ;
     }
 
     @Override
-    public void remove()
-    { throw new UnsupportedOperationException("IteratorTruncate.remove"); }
-
-    public void close() {
-        if ( iter != null )
-            Iter.close(iter) ; 
+    protected void closeIterator() {
+        Iter.close(iter);
     }
-
-}
+}
\ No newline at end of file