如何在java中将字符串数组转换为枚举数组

pra*_*tzy 6 java arrays enums

我有一个字符串数组,其中包含从用户获取的枚举值.我现在如何将此字符串数组转换为枚举数组,以便可以迭代元素并在其他方法中进一步使用?这需要用Java完成.

基本上我要问的是,例如,如果我有这个数组

String [] names = {"Autumn", "Spring", "Autumn", "Autumn" };
Run Code Online (Sandbox Code Playgroud)

我有这个枚举

enum Season
{ 
    Autumn, Spring;
}
Run Code Online (Sandbox Code Playgroud)

我现在如何将上面的String类型数组转换为枚举季节类型的数组?

DaB*_*ick 7

这是一个完整的代码示例:

private static List<Season> foo(List<String> slist) {
    List<Role> list = new ArrayList<>();
    for (String val : slist) {
        list.add(Season.valueOf(val));
    }
    return list;
}
Run Code Online (Sandbox Code Playgroud)

现在,如果你想制作一个可以为任何枚举执行此操作的通用方法,它会变得有点过时.你必须使用"通用方法":

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;
}
Run Code Online (Sandbox Code Playgroud)

您必须按如下方式调用此方法:

List<Strings> slist = ....
List<Season> elist= makeIt(Season.class, slist);
Run Code Online (Sandbox Code Playgroud)


Fra*_*ank 6

像这样:来自这里的代码

public enum Weekdays {
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday
}
Run Code Online (Sandbox Code Playgroud)

如果您需要进行查找,您可以执行以下操作:

Weekdays weekday = Weekdays.valueOf("Monday");
System.out.println(weekday);
Run Code Online (Sandbox Code Playgroud)

但要小心,IllegalArgumentException如果提供的String不存在,这将抛出.


pst*_*ton 5

回答实际问题:

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);
Run Code Online (Sandbox Code Playgroud)