Get enum values as List of String in Java 8

JavaEnumsJava 8

Java Problem Overview


Is there any Java 8 method or easy way, which returns Enum values as a List of String, like:

List<String> sEnum = getEnumValuesAsString();

Java Solutions


Solution 1 - Java

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());

Solution 2 - Java

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSuganthan Madhavan PillaiView Question on Stackoverflow
Solution 1 - JavaKonstantin YovkovView Answer on Stackoverflow
Solution 2 - JavaRafView Answer on Stackoverflow