package bjc.utils.funcutils; import java.util.Random; import java.util.function.Consumer; import bjc.funcdata.FunctionalList; import bjc.funcdata.IList; /** * Utility methods on enums. * * @author ben */ public class EnumUtils { /** * Do an action for a random number of enum values. * * @param * The type of the enum. * * @param clasz * The enum class. * * @param nValues * The number of values to execute the action on. * * @param action * The action to perform on random values. * * @param rnd * The source of randomness to use. */ public static > void doForValues(final Class clasz, final int nValues, final Consumer action, final Random rnd) { final E[] enumValues = clasz.getEnumConstants(); final IList valueList = new FunctionalList<>(enumValues); final int randomValueCount = enumValues.length - nValues; for(int i = 0; i <= randomValueCount; i++) { final E rDir = valueList.randItem(rnd::nextInt); valueList.removeMatching(rDir); } valueList.forEach(action); } /** * Get a random value from an enum. * * @param * The type of the enum. * * @param clasz * The class of the enum. * * @param rnd * The random source to use. * * @return A random value from the specified enum. */ public static > E getRandomValue(final Class clasz, final Random rnd) { final E[] enumValues = clasz.getEnumConstants(); return new FunctionalList<>(enumValues).randItem(rnd::nextInt); } }