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