summaryrefslogtreecommitdiff
path: root/BJC-Utils2/src/main/java/bjc/utils/data/GeneratingIterator.java
diff options
context:
space:
mode:
authorbculkin2442 <bjculkin@mix.wvu.edu>2017-04-11 16:29:24 -0400
committerbculkin2442 <bjculkin@mix.wvu.edu>2017-04-11 16:29:24 -0400
commitb7f997d3686cdd60a31c9a37a4c85a2875d303b3 (patch)
treeef6de8f9d587c9ed0944a98717f345649462d3cb /BJC-Utils2/src/main/java/bjc/utils/data/GeneratingIterator.java
parent9f619b8de8f2c5da9dff170e2e351cfe57eaebc8 (diff)
More splitters
Diffstat (limited to 'BJC-Utils2/src/main/java/bjc/utils/data/GeneratingIterator.java')
-rw-r--r--BJC-Utils2/src/main/java/bjc/utils/data/GeneratingIterator.java53
1 files changed, 53 insertions, 0 deletions
diff --git a/BJC-Utils2/src/main/java/bjc/utils/data/GeneratingIterator.java b/BJC-Utils2/src/main/java/bjc/utils/data/GeneratingIterator.java
new file mode 100644
index 0000000..9abca7c
--- /dev/null
+++ b/BJC-Utils2/src/main/java/bjc/utils/data/GeneratingIterator.java
@@ -0,0 +1,53 @@
+package bjc.utils.data;
+
+import java.util.Iterator;
+import java.util.function.Predicate;
+import java.util.function.UnaryOperator;
+
+/**
+ * An iterator that generates a series of elements from a single element.
+ *
+ * @author bjculkin
+ *
+ * @param <E>
+ * The type of element generated.
+ */
+public class GeneratingIterator<E> implements Iterator<E> {
+ private E state;
+
+ private UnaryOperator<E> transtion;
+
+ private Predicate<E> stpper;
+
+ /**
+ * Create a new generative iterator.
+ *
+ * @param initial
+ * The initial state of the generator.
+ *
+ * @param transition
+ * The function to apply to the state.
+ *
+ * @param stopper
+ * The predicate applied to the current state to
+ * determine when to stop.
+ */
+ public GeneratingIterator(E initial, UnaryOperator<E> transition, Predicate<E> stopper) {
+ state = initial;
+ transtion = transition;
+ stpper = stopper;
+ }
+
+ @Override
+ public boolean hasNext() {
+ return stpper.test(state);
+ }
+
+ @Override
+ public E next() {
+ state = transtion.apply(state);
+
+ return state;
+ }
+
+}