Is there any Java 8 method or easy way, which returns Enum values as a List of String, like:
List<String> sEnum = getEnumValuesAsString();
The idea is to use the Enum. GetValues() method to get an array of the enum constants' values. To get an IEnumerable<T> of all the values in the enum, call Cast<T>() on the array. To get a list, call ToList() after casting.
You can create a list that holds enum instances just like you would create a list that holds any other kind of objects: ? List<ExampleEnum> list = new ArrayList<ExampleEnum>(); list.
You can do (pre-Java 8):
List<Enum> enumValues = Arrays.asList(Enum.values());
or
List<Enum> enumValues = new ArrayList<Enum>(EnumSet.allOf(Enum.class));
Using Java 8 features, you can map each constant to its name:
List<String> enumNames = Stream.of(Enum.values()) .map(Enum::name) .collect(Collectors.toList());
You could also do something as follow
public enum DAY {MON, TUES, WED, THU, FRI, SAT, SUN}; EnumSet.allOf(DAY.class).stream().map(e -> e.name()).collect(Collectors.toList())
or
EnumSet.allOf(DAY.class).stream().map(DAY::name).collect(Collectors.toList())
The main reason why I stumbled across this question is that I wanted to write a generic validator that validates whether a given string enum name is valid for a given enum type (Sharing in case anyone finds useful).
For the validation, I had to use Apache's EnumUtils
library since the type of enum is not known at compile time.
@SuppressWarnings({ "unchecked", "rawtypes" }) public static void isValidEnumsValid(Class clazz, Set<String> enumNames) { Set<String> notAllowedNames = enumNames.stream() .filter(enumName -> !EnumUtils.isValidEnum(clazz, enumName)) .collect(Collectors.toSet()); if (notAllowedNames.size() > 0) { String validEnumNames = (String) EnumUtils.getEnumMap(clazz).keySet().stream() .collect(Collectors.joining(", ")); throw new IllegalArgumentException("The requested values '" + notAllowedNames.stream() .collect(Collectors.joining(",")) + "' are not valid. Please select one more (case-sensitive) " + "of the following : " + validEnumNames); } }
I was too lazy to write an enum annotation validator as shown in here https://stackoverflow.com/a/51109419/1225551
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With