diff options
| author | bculkin2442 <bjculkin@mix.wvu.edu> | 2015-09-29 10:03:30 -0400 |
|---|---|---|
| committer | bculkin2442 <bjculkin@mix.wvu.edu> | 2015-09-29 10:03:30 -0400 |
| commit | e528aec6d2d277338d7ddfdceba38d62eff08657 (patch) | |
| tree | a5c7c63ed5012e9dc7d93ae1d46fd8493bb37ce8 /BJC-Utils2/src/main/java/bjc/utils/funcdata/FunctionalStringTokenizer.java | |
| parent | f8215c428f0b46b459c59d0783b4bc4dadfc38a3 (diff) | |
More data structure work.
Yet more imports from previous version.
Diffstat (limited to 'BJC-Utils2/src/main/java/bjc/utils/funcdata/FunctionalStringTokenizer.java')
| -rw-r--r-- | BJC-Utils2/src/main/java/bjc/utils/funcdata/FunctionalStringTokenizer.java | 55 |
1 files changed, 55 insertions, 0 deletions
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<String> 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 <E> FunctionalList<E> toList(Function<String, E> f) { + FunctionalList<E> r = new FunctionalList<>(); + + forEachToken(tk -> r.add(f.apply(tk))); + + return r; + } +} |
