summaryrefslogtreecommitdiff
path: root/BJC-Utils2
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
parent9f619b8de8f2c5da9dff170e2e351cfe57eaebc8 (diff)
More splitters
Diffstat (limited to 'BJC-Utils2')
-rw-r--r--BJC-Utils2/src/main/java/bjc/utils/data/GeneratingIterator.java53
-rw-r--r--BJC-Utils2/src/main/java/bjc/utils/funcdata/IList.java21
-rw-r--r--BJC-Utils2/src/main/java/bjc/utils/parserutils/TokenUtils.java3
-rw-r--r--BJC-Utils2/src/main/java/bjc/utils/parserutils/splitter/ChainTokenSplitter.java3
-rw-r--r--BJC-Utils2/src/main/java/bjc/utils/parserutils/splitter/FilteredTokenSplitter.java37
-rw-r--r--BJC-Utils2/src/main/java/bjc/utils/parserutils/splitter/TransformTokenSplitter.java38
6 files changed, 153 insertions, 2 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;
+ }
+
+}
diff --git a/BJC-Utils2/src/main/java/bjc/utils/funcdata/IList.java b/BJC-Utils2/src/main/java/bjc/utils/funcdata/IList.java
index de48d6f..28c09d0 100644
--- a/BJC-Utils2/src/main/java/bjc/utils/funcdata/IList.java
+++ b/BJC-Utils2/src/main/java/bjc/utils/funcdata/IList.java
@@ -10,6 +10,7 @@ import java.util.function.Predicate;
import java.util.stream.Collector;
import bjc.utils.data.IPair;
+import bjc.utils.functypes.ID;
/**
* A wrapper over another list that provides functional operations over it.
@@ -316,6 +317,26 @@ public interface IList<ContainedType> extends Iterable<ContainedType> {
Function<StateType, ReducedType> transformer);
/**
+ * Reduce this list to a single value, using a accumulative approach.
+ *
+ * @param <StateType>
+ * The in-between type of the values.
+ *
+ * @param initial
+ * The initial value of the accumulative state.
+ *
+ * @param accumulator
+ * The function to use to combine a list element with the
+ * accumulative state.
+ *
+ * @return A single value condensed from this list.
+ */
+ default <StateType> StateType reduceAux(StateType initial,
+ BiFunction<ContainedType, StateType, StateType> accumulator) {
+ return reduceAux(initial, accumulator, ID.id());
+ }
+
+ /**
* Remove all elements that match a given predicate
*
* @param predicate
diff --git a/BJC-Utils2/src/main/java/bjc/utils/parserutils/TokenUtils.java b/BJC-Utils2/src/main/java/bjc/utils/parserutils/TokenUtils.java
index 0a68df5..f825488 100644
--- a/BJC-Utils2/src/main/java/bjc/utils/parserutils/TokenUtils.java
+++ b/BJC-Utils2/src/main/java/bjc/utils/parserutils/TokenUtils.java
@@ -22,6 +22,9 @@ import bjc.utils.parserutils.splitter.TokenSplitter;
*/
public class TokenUtils {
/**
+ * Simple implementation of TokenSplitter for removing double-quoted
+ * strings.
+ *
* @author EVE
*
*/
diff --git a/BJC-Utils2/src/main/java/bjc/utils/parserutils/splitter/ChainTokenSplitter.java b/BJC-Utils2/src/main/java/bjc/utils/parserutils/splitter/ChainTokenSplitter.java
index f431688..4736310 100644
--- a/BJC-Utils2/src/main/java/bjc/utils/parserutils/splitter/ChainTokenSplitter.java
+++ b/BJC-Utils2/src/main/java/bjc/utils/parserutils/splitter/ChainTokenSplitter.java
@@ -2,7 +2,6 @@ package bjc.utils.parserutils.splitter;
import bjc.utils.funcdata.FunctionalList;
import bjc.utils.funcdata.IList;
-import bjc.utils.functypes.ID;
/**
* A token splitter that chains several other splitters together.
@@ -46,6 +45,6 @@ public class ChainTokenSplitter implements TokenSplitter {
return spliters.reduceAux(initList, (splitter, strangs) -> {
return strangs.flatMap(splitter::split);
- }, ID.id());
+ });
}
} \ No newline at end of file
diff --git a/BJC-Utils2/src/main/java/bjc/utils/parserutils/splitter/FilteredTokenSplitter.java b/BJC-Utils2/src/main/java/bjc/utils/parserutils/splitter/FilteredTokenSplitter.java
new file mode 100644
index 0000000..5d954e0
--- /dev/null
+++ b/BJC-Utils2/src/main/java/bjc/utils/parserutils/splitter/FilteredTokenSplitter.java
@@ -0,0 +1,37 @@
+package bjc.utils.parserutils.splitter;
+
+import java.util.function.Predicate;
+
+import bjc.utils.funcdata.IList;
+
+/**
+ * A token splitter that removes tokens that match a predicate from the stream
+ * of tokens.
+ *
+ * @author bjculkin
+ *
+ */
+public class FilteredTokenSplitter implements TokenSplitter {
+ private TokenSplitter source;
+
+ private Predicate<String> filter;
+
+ /**
+ * Create a new filtered token splitter.
+ *
+ * @param source
+ * The splitter to get tokens from.
+ *
+ * @param filter
+ * The filter to pass tokens through.
+ */
+ public FilteredTokenSplitter(TokenSplitter source, Predicate<String> filter) {
+ this.source = source;
+ this.filter = filter;
+ }
+
+ @Override
+ public IList<String> split(String input) {
+ return source.split(input).getMatching(filter);
+ }
+}
diff --git a/BJC-Utils2/src/main/java/bjc/utils/parserutils/splitter/TransformTokenSplitter.java b/BJC-Utils2/src/main/java/bjc/utils/parserutils/splitter/TransformTokenSplitter.java
new file mode 100644
index 0000000..80490f5
--- /dev/null
+++ b/BJC-Utils2/src/main/java/bjc/utils/parserutils/splitter/TransformTokenSplitter.java
@@ -0,0 +1,38 @@
+package bjc.utils.parserutils.splitter;
+
+import java.util.function.UnaryOperator;
+
+import bjc.utils.funcdata.IList;
+
+/**
+ * A token splitter that performs a transform on the tokens from another
+ * splitter.
+ *
+ * @author bjculkin
+ *
+ */
+public class TransformTokenSplitter implements TokenSplitter {
+ private TokenSplitter source;
+
+ private UnaryOperator<String> transform;
+
+ /**
+ * Create a new transforming splitter.
+ *
+ * @param source
+ * The splitter to use as a source.
+ *
+ * @param transform
+ * The transform to apply to tokens.
+ */
+ public TransformTokenSplitter(TokenSplitter source, UnaryOperator<String> transform) {
+ this.source = source;
+ this.transform = transform;
+ }
+
+ @Override
+ public IList<String> split(String input) {
+ return source.split(input).map(transform);
+ }
+
+}