From e528aec6d2d277338d7ddfdceba38d62eff08657 Mon Sep 17 00:00:00 2001 From: bculkin2442 Date: Tue, 29 Sep 2015 10:03:30 -0400 Subject: More data structure work. Yet more imports from previous version. --- .../utils/funcdata/FunctionalStringTokenizer.java | 55 ++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 BJC-Utils2/src/main/java/bjc/utils/funcdata/FunctionalStringTokenizer.java (limited to 'BJC-Utils2/src/main/java/bjc/utils/funcdata/FunctionalStringTokenizer.java') diff --git a/BJC-Utils2/src/main/java/bjc/utils/funcdata/FunctionalStringTokenizer.java b/BJC-Utils2/src/main/java/bjc/utils/funcdata/FunctionalStringTokenizer.java new file mode 100644 index 0000000..1732043 --- /dev/null +++ b/BJC-Utils2/src/main/java/bjc/utils/funcdata/FunctionalStringTokenizer.java @@ -0,0 +1,55 @@ +package bjc.utils.funcdata; + +import java.util.StringTokenizer; +import java.util.function.Consumer; +import java.util.function.Function; + +/** + * A string tokenizer that exposes a functional interface + * @author ben + * + */ +public class FunctionalStringTokenizer { + private StringTokenizer inp; + + /** + * Create a functional string tokenizer from a non-functional one + * @param inp The non-functional string tokenizer to wrap + */ + public FunctionalStringTokenizer(StringTokenizer inp) { + this.inp = inp; + } + + /** + * Execute a provided action for each of the remaining tokens + * @param f The action to execute for each token + */ + public void forEachToken(Consumer f) { + while(inp.hasMoreTokens()) { + f.accept(inp.nextToken()); + } + } + + /** + * Return the next token from the tokenizer + * Returns null if no more tokens are available + * @return The next token from the tokenizer + */ + public String nextToken() { + return inp.hasMoreTokens() ? inp.nextToken() : null; + } + + /** + * Convert the contents of this tokenizer into a list. + * Consumes all of the input from this tokenizer. + * @param f The function to use to convert tokens. + * @return A list containing all of the converted tokens. + */ + public FunctionalList toList(Function f) { + FunctionalList r = new FunctionalList<>(); + + forEachToken(tk -> r.add(f.apply(tk))); + + return r; + } +} -- cgit v1.2.3