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