diff options
| author | Benjamin J. Culkin <bjculkin@mix.wvu.edu> | 2017-09-11 12:12:10 -0300 |
|---|---|---|
| committer | Benjamin J. Culkin <bjculkin@mix.wvu.edu> | 2017-09-11 12:12:10 -0300 |
| commit | c5145da9d7ac09b4aa15ac1e5652b841a6598072 (patch) | |
| tree | d9b185df77a9098e2864df2853451640d20a9cab /BJC-Utils2/src/main/java/bjc | |
| parent | 0a158db894299a05dac881c7c829bd69ab464d24 (diff) | |
Add converge combinator
Adds a function that creates a function that iterates an operator until
it either converges or exceeds a defined number of iterations.
Diffstat (limited to 'BJC-Utils2/src/main/java/bjc')
| -rw-r--r-- | BJC-Utils2/src/main/java/bjc/utils/funcutils/FuncUtils.java | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/BJC-Utils2/src/main/java/bjc/utils/funcutils/FuncUtils.java b/BJC-Utils2/src/main/java/bjc/utils/funcutils/FuncUtils.java index 0d1a688..cd1bcc9 100644 --- a/BJC-Utils2/src/main/java/bjc/utils/funcutils/FuncUtils.java +++ b/BJC-Utils2/src/main/java/bjc/utils/funcutils/FuncUtils.java @@ -45,4 +45,31 @@ public class FuncUtils { cons.accept(i); } } + + /** + * Return an operator that executes until it converges. + * + * @param op + * The operator to execute. + * @param maxTries + * The maximum amount of times to apply the function in an + * attempt to cause it to converge. + */ + public static <T> UnaryOperator<T> converge(final UnaryOperator<T> op, final int maxTries) { + return (val) -> { + T newVal = op.apply(val); + T oldVal; + + int tries = 0; + + do { + oldVal = newVal; + newVal = op.apply(newVal); + + tries += 1; + } while(!newVal.equals(oldVal) && tries < maxTries); + + return newVal; + }; + } } |
