Iter.step

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

Branch: refs/heads/master
Commit: e8613aa0d24a607ef9eb59c200e7072f41cf79c5
Parents: c0332b2
Author: Andy Seaborne <[email protected]>
Authored: Mon Nov 20 21:50:08 2017 +0000
Committer: Andy Seaborne <[email protected]>
Committed: Mon Nov 20 21:50:08 2017 +0000

----------------------------------------------------------------------
 .../org/apache/jena/atlas/iterator/Iter.java    | 16 ++++++++
 .../apache/jena/atlas/iterator/TestIter.java    | 43 ++++++++++++++++++++
 2 files changed, 59 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/e8613aa0/jena-base/src/main/java/org/apache/jena/atlas/iterator/Iter.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/iterator/Iter.java 
b/jena-base/src/main/java/org/apache/jena/atlas/iterator/Iter.java
index c72fbac..2dbc734 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/iterator/Iter.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/iterator/Iter.java
@@ -351,6 +351,22 @@ public class Iter<T> implements Iterator<T> {
         return filter(iter, Objects::nonNull) ;
     }
 
+    /** Step forward up to {@code steps} places.
+     * <br/>Return number of steps taken.
+     * 
+     * @apiNote
+     * The iterator is moved at most {@code steps} places with no overshoot.
+     * The iterator can be used afterwards.
+     */ 
+    public static int step(Iterator<?> iter, int steps) {
+        for ( int i = 0 ; i < steps; i++) {
+            if ( ! iter.hasNext() ) 
+                return i;
+            iter.next();
+        }
+        return steps;
+    }
+
     /** Take the first N elements of an iterator - stop early if too few */
     public static <T> List<T> take(Iterator<T> iter, int N) {
         iter = new IteratorN<>(iter, N) ;

http://git-wip-us.apache.org/repos/asf/jena/blob/e8613aa0/jena-base/src/test/java/org/apache/jena/atlas/iterator/TestIter.java
----------------------------------------------------------------------
diff --git 
a/jena-base/src/test/java/org/apache/jena/atlas/iterator/TestIter.java 
b/jena-base/src/test/java/org/apache/jena/atlas/iterator/TestIter.java
index 76929e4..3e614cb 100644
--- a/jena-base/src/test/java/org/apache/jena/atlas/iterator/TestIter.java
+++ b/jena-base/src/test/java/org/apache/jena/atlas/iterator/TestIter.java
@@ -24,6 +24,7 @@ import static org.junit.Assert.assertTrue ;
 
 import java.util.* ;
 import java.util.function.Predicate;
+import java.util.stream.IntStream;
 
 import org.junit.Test ;
 
@@ -321,6 +322,48 @@ public class TestIter
         assertEquals(-1, Iter.lastIndex(data, filter)) ;
     }
     
+    
+    private static Iterator<?> iterator(int n) { 
+        return IntStream.range(1, n+1).iterator();
+    }
+
+    @Test public void iteratorStep_1() {
+        Iterator<?> iter = iterator(0); 
+        int x = Iter.step(iter, 0);
+        assertEquals(0,x);
+    }
+    
+    @Test public void iteratorStep_2() {
+        Iterator<?> iter = iterator(0); 
+        int x = Iter.step(iter, 1);
+        assertEquals(0,x);
+    }
+
+    @Test public void iteratorStep_3() {
+        Iterator<?> iter = iterator(5); 
+        int x = Iter.step(iter, 1);
+        assertEquals(1,x);
+    }
+
+    @Test public void iteratorStep_4() {
+        Iterator<?> iter = iterator(5); 
+        int x = Iter.step(iter, 4);
+        assertEquals(4,x);
+    }
+    
+    @Test public void iteratorStep_5() {
+        Iterator<?> iter = iterator(5); 
+        int x = Iter.step(iter, 5);
+        assertEquals(5,x);
+    }
+    
+    @Test public void iteratorStep_6() {
+        Iterator<?> iter = iterator(5); 
+        int x = Iter.step(iter, 6);
+        assertEquals(5,x);
+    }
+
+    
     @Test
     public void take_01()
     {

Reply via email to