From d2af58b0f68ebfbba2be7e7679efec6c8c0af12f Mon Sep 17 00:00:00 2001 From: bculkin2442 Date: Thu, 9 Feb 2017 11:50:31 -0500 Subject: Update --- .../main/java/bjc/utils/gen/WeightedRandom.java | 34 ++++++++++------------ 1 file changed, 15 insertions(+), 19 deletions(-) (limited to 'BJC-Utils2/src/main/java/bjc/utils/gen/WeightedRandom.java') 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 { - /** + /* * The list of probabilities for each result */ private IList probabilities; - /** + /* * The list of possible results to pick from */ private IList results; - /** + /* * The source for any needed random numbers */ private Random source; @@ -75,27 +75,23 @@ public class WeightedRandom { * @return A random value selected in a weighted fashion. */ public E generateValue() { - IHolder randomValue = new Identity<>( - source.nextInt(totalChance)); - IHolder currentResult = new Identity<>(); - IHolder 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 value = new Identity<>(source.nextInt(totalChance)); + IHolder current = new Identity<>(); + IHolder 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); } /** -- cgit v1.2.3