How to convert string array to enum array in java
Solution 1
Here's a complete code example:
private static List<Season> foo(List<String> slist) {
List<Role> list = new ArrayList<>();
for (String val : slist) {
list.add(Season.valueOf(val));
}
return list;
}
Now if you want to make a generic method that would do this for any Enum, it gets a bit tricker. You have to use a "generic method":
private static <T extends Enum<T>> List<T> makeIt(Class<T> clazz, List<String> values) {
List<T> list = new ArrayList<>();
for (String level : values) {
list.add(Enum.valueOf(clazz, level));
}
return list;
}
You'd have to call this as follows:
List<Strings> slist = ....
List<Season> elist= makeIt(Season.class, slist);
Solution 2
Like this: code from here
public enum Weekdays {
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
}
If you need to do a lookup you can do:
Weekdays weekday = Weekdays.valueOf("Monday");
System.out.println(weekday);
But be carefull as this will throw an IllegalArgumentException
if the provided String
does not exists.
Solution 3
to answer the actual question:
public <T extends Enum<T>> T[] toEnums(String[] arr, Class<T> type)
{
T[] result = (T[]) Array.newInstance(type, arr.length);
for (int i = 0; i < arr.length; i++)
result[i] = Enum.valueOf(type, arr[i]);
return result;
}
Season[] seasons = toEnums(names, Season.class);
Solution 4
from Java 8 onwards you can make use of stream to achieve this in one line
String [] names = {"Autumn", "Spring", "Autumn", "Autumn" };
List<Season> seasons = Arrays.stream(names).map(Season::valueOf).collect(Collectors.toList());
pratzy
Updated on February 05, 2021Comments
-
pratzy about 3 years
I have a string array that contains the enum values taken from the user. How do I now convert this string array to enum array so that the elements can then be iterated and used further in other methods? This needs to be done in Java.
Basically I am asking is that for example if I have this array
String [] names = {"Autumn", "Spring", "Autumn", "Autumn" };
and I have this enum
enum Season { Autumn, Spring; }
How do I now convert the above array of String type to an array of enum Season type?
-
bonCodigo over 11 yearsAnswer's reference website. Adding the link for full overview.
-
pratzy over 11 years@jakub... yeah it would be good enough if you can post an example