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() {
