diff options
| author | bculkin2442 <bjculkin@mix.wvu.edu> | 2017-02-09 11:50:31 -0500 |
|---|---|---|
| committer | bculkin2442 <bjculkin@mix.wvu.edu> | 2017-02-09 11:50:31 -0500 |
| commit | d2af58b0f68ebfbba2be7e7679efec6c8c0af12f (patch) | |
| tree | 2b16fbf014db350126e8c1b5f081312276f85f62 /BJC-Utils2/src/main/java/bjc/utils/gen | |
| parent | 187e1815488e3c1ed22e7592f304e632cffefb82 (diff) | |
Update
Diffstat (limited to 'BJC-Utils2/src/main/java/bjc/utils/gen')
| -rw-r--r-- | BJC-Utils2/src/main/java/bjc/utils/gen/WeightedRandom.java | 34 |
1 files changed, 15 insertions, 19 deletions
diff --git a/BJC-Utils2/src/main/java/bjc/utils/gen/WeightedRandom.java b/BJC-Utils2/src/main/java/bjc/utils/gen/WeightedRandom.java index 4819ca2..2df820c 100644 --- a/BJC-Utils2/src/main/java/bjc/utils/gen/WeightedRandom.java +++ b/BJC-Utils2/src/main/java/bjc/utils/gen/WeightedRandom.java @@ -18,17 +18,17 @@ import bjc.utils.funcdata.IList; * The type of values that are randomly selected. */ public class WeightedRandom<E> { - /** + /* * The list of probabilities for each result */ private IList<Integer> probabilities; - /** + /* * The list of possible results to pick from */ private IList<E> results; - /** + /* * The source for any needed random numbers */ private Random source; @@ -75,27 +75,23 @@ public class WeightedRandom<E> { * @return A random value selected in a weighted fashion. */ public E generateValue() { - IHolder<Integer> randomValue = new Identity<>( - source.nextInt(totalChance)); - IHolder<E> currentResult = new Identity<>(); - IHolder<Boolean> valuePicked = new Identity<>(true); - - probabilities.forEachIndexed((itemIndex, itemProbability) -> { - if (valuePicked.unwrap(bool -> bool)) { - if (randomValue - .unwrap((number) -> number < itemProbability)) { - currentResult.transform( - (result) -> results.getByIndex(itemIndex)); - - valuePicked.transform((bool) -> false); + IHolder<Integer> value = new Identity<>(source.nextInt(totalChance)); + IHolder<E> current = new Identity<>(); + IHolder<Boolean> picked = new Identity<>(true); + + probabilities.forEachIndexed((index, probability) -> { + if (picked.unwrap(bool -> bool)) { + if (value.unwrap((number) -> number < probability)) { + current.transform((result) -> results.getByIndex(index)); + + picked.transform((bool) -> false); } else { - randomValue.transform( - (number) -> number - itemProbability); + value.transform((number) -> number - probability); } } }); - return currentResult.unwrap((result) -> result); + return current.unwrap((result) -> result); } /** |
