You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2015/03/10 18:23:03 UTC

incubator-tinkerpop git commit: Add IteratorUtil.reduce and associated tests.

Repository: incubator-tinkerpop
Updated Branches:
  refs/heads/master e7d623d51 -> 144c5e744


Add IteratorUtil.reduce and associated tests.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/144c5e74
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/144c5e74
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/144c5e74

Branch: refs/heads/master
Commit: 144c5e74492f5e414faadc6a6fbbd7155536814a
Parents: e7d623d
Author: Stephen Mallette <sp...@apache.org>
Authored: Tue Mar 10 13:22:47 2015 -0400
Committer: Stephen Mallette <sp...@apache.org>
Committed: Tue Mar 10 13:22:47 2015 -0400

----------------------------------------------------------------------
 .../gremlin/util/iterator/IteratorUtils.java    | 28 ++++++++++++++
 .../util/iterator/IteratorUtilsTest.java        | 39 ++++++++++++++++++++
 2 files changed, 67 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/144c5e74/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/iterator/IteratorUtils.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/iterator/IteratorUtils.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/iterator/IteratorUtils.java
index 7d37a5d..d946bf0 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/iterator/IteratorUtils.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/iterator/IteratorUtils.java
@@ -26,6 +26,8 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.function.BiFunction;
+import java.util.function.BinaryOperator;
 import java.util.function.Function;
 import java.util.function.Predicate;
 import java.util.stream.Stream;
@@ -142,6 +144,32 @@ public final class IteratorUtils {
         return map;
     }
 
+    public static <S> S reduce(final Iterator<S> iterator, final S identity, final BinaryOperator<S> accumulator) {
+        S result = identity;
+        while (iterator.hasNext()) {
+            result = accumulator.apply(result, iterator.next());
+        }
+
+        return result;
+    }
+
+    public static <S> S reduce(final Iterable<S> iterable, final S identity, final BinaryOperator<S> accumulator) {
+        return reduce(iterable.iterator(), identity, accumulator);
+    }
+
+    public static <S, E> E reduce(final Iterator<S> iterator, final E identity, final BiFunction<E, S, E> accumulator) {
+        E result = identity;
+        while (iterator.hasNext()) {
+            result = accumulator.apply(result, iterator.next());
+        }
+
+        return result;
+    }
+
+    public static <S, E> E reduce(final Iterable<S> iterable, final E identity, final BiFunction<E, S, E> accumulator) {
+        return reduce(iterable.iterator(), identity, accumulator);
+    }
+
     ///////////////
 
     public static final <S, E> Iterator<E> map(final Iterator<S> iterator, final Function<S, E> function) {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/144c5e74/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/util/iterator/IteratorUtilsTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/util/iterator/IteratorUtilsTest.java b/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/util/iterator/IteratorUtilsTest.java
index 42f185c..d8c66ed 100644
--- a/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/util/iterator/IteratorUtilsTest.java
+++ b/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/util/iterator/IteratorUtilsTest.java
@@ -390,6 +390,45 @@ public class IteratorUtilsTest {
         assertIterator(IteratorUtils.concat(iterable1.iterator(), iterable2.iterator()), 6);
     }
 
+    @Test
+    public void shouldReduceFromIteratorWithBinaryOperator() {
+        final List<String> iterable = new ArrayList<>();
+        iterable.add("1");
+        iterable.add("2");
+        iterable.add("3");
+
+        assertEquals("test123", IteratorUtils.reduce(iterable.iterator(), "test", (a, b) -> a + b));
+    }
+
+    @Test
+    public void shouldReduceFromIterableWithBinaryOperator() {
+        final List<String> iterable = new ArrayList<>();
+        iterable.add("1");
+        iterable.add("2");
+        iterable.add("3");
+
+        assertEquals("test123", IteratorUtils.reduce(iterable, "test", (a,b) -> a + b));
+    }
+
+    @Test
+    public void shouldReduceFromIterator() {
+        final List<String> iterable = new ArrayList<>();
+        iterable.add("1");
+        iterable.add("2");
+        iterable.add("3");
+
+        assertEquals(new Integer(16), IteratorUtils.reduce(iterable.iterator(), 10, (accumulator, val) -> accumulator + Integer.parseInt(val)));
+    }
+
+    @Test
+    public void shouldReduceFromIterable() {
+        final List<String> iterable = new ArrayList<>();
+        iterable.add("1");
+        iterable.add("2");
+        iterable.add("3");
+
+        assertEquals(new Integer(16), IteratorUtils.reduce(iterable, 10, (accumulator, val) -> accumulator + Integer.parseInt(val)));
+    }
 
     public <S> void assertIterator(final Iterator<S> itty, final int size) {
         for (int ix = 0; ix < size; ix++) {