package fr.pandacube.lib.util; import java.util.Arrays; import java.util.stream.Collectors; public class EnumUtil { /** * List all enum constants which are in the specified enum class. * * @param enumType the enum class. * @param separator a string which will be used as a separator * @return a string representation of the enum class. */ public static > String enumList(Class enumType, String separator) { return Arrays.stream(enumType.getEnumConstants()) .map(Enum::name) .collect(Collectors.joining(separator)); } /** * List all enum constants which are in the specified enum class. It is * equivalent to call * {@link #enumList(Class, String)} with the second parameter * ", " * * @param enumType the enum class. * @return a string representation of the enum class. */ public static > String enumList(Class enumType) { return enumList(enumType, ", "); } /** * Permet de rechercher l'existance d'un élément dans un enum, de façon * insensible à la casse * * @param enumType la classe correpondant à l'enum à lister * @param search l'élément à rechercher, insensible à la casse * @return l'élément de l'énumarétion, si elle a été trouvée, null sinon */ public static > T searchEnum(Class enumType, String search) { T[] elements = enumType.getEnumConstants(); for (T el : elements) if (el.name().equalsIgnoreCase(search)) return el; return null; } /** * Permet de rechercher l'existance d'un élément dans un enum, de façon * insensible à la casse * La validité de la classe passé en premier paramètre est vérifiée * dynamiquement et non * statiquement. Préférez l'utilisation de * {@link #searchEnum(Class, String)} quand c'est possible. * * @param enumType la classe correpondant à l'enum à lister * @param search l'élément à rechercher, insensible à la casse * @return l'élément de l'énumération, si elle a été trouvée et si la classe * passée en paramètre est un enum, null dans les autres cas */ public static Enum searchUncheckedEnum(Class enumType, String search) { if (!enumType.isEnum()) return null; Enum[] elements = (Enum[]) enumType.getEnumConstants(); for (Enum el : elements) if (el.name().equalsIgnoreCase(search)) return el; return null; } /** * Retourne une valeur aléatoire parmis les élément de l'Enum spécifié en * paramètre. * * @param enumType l'enum dans lequel piocher la valeur * @return une des valeurs de l'enum */ public static > T randomValue(Class enumType) { T[] elements = enumType.getEnumConstants(); return elements[RandomUtil.rand.nextInt(elements.length)]; } }