How to convert string array to enum array in java

20,330

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());
Share:
20,330
pratzy
Author by

pratzy

Updated on February 05, 2021

Comments

  • pratzy
    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
    bonCodigo over 11 years
    Answer's reference website. Adding the link for full overview.
  • pratzy
    pratzy over 11 years
    @jakub... yeah it would be good enough if you can post an example