我有一个字符串数组,其中包含从用户获取的枚举值。我现在如何将此字符串数组转换为枚举数组,以便可以迭代元素并在其他方法中进一步使用?这需要用Java完成。
基本上我要问的是,例如,如果我有这个数组
String [] names = {"Autumn", "Spring", "Autumn", "Autumn" };
我有这个枚举
enum Season
{
Autumn, Spring;
}
我现在如何将上面的String类型数组转换为枚举季节类型的数组?
答案 0 :(得分: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;
}
现在,如果你想创建一个通用的方法来为任何枚举做这个,它会有点过时。你必须使用“通用方法”:
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;
}
你必须按如下方式调用:
List<Strings> slist = ....
List<Season> elist= makeIt(Season.class, slist);
答案 1 :(得分:6)
像这样:code from here
public enum Weekdays {
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
}
如果您需要进行查找,可以执行以下操作:
Weekdays weekday = Weekdays.valueOf("Monday");
System.out.println(weekday);
但请注意,如果提供的IllegalArgumentException
不存在,则会抛出String
。
答案 2 :(得分:3)
回答实际问题:
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);
答案 3 :(得分:1)
从 Java 8 开始,您可以使用流在一行中实现这一点
String [] names = {"Autumn", "Spring", "Autumn", "Autumn" };
List<Season> seasons = Arrays.stream(names).map(Season::valueOf).collect(Collectors.toList());
答案 4 :(得分:0)
String s[]=new String[Numbers.values().length];
int i =0;
for (Numbers op : Numbers.values()) {
s[i++] =op.toString();
System.out.println(op.toString());
}
public enum Numbers {
one,
two,
three
}
答案 5 :(得分:-1)
如果您使用的是Swing而不是命令提示符或Web表单,您实际上可以将枚举实例传递给JComboBox。当用户进行选择时,您将直接获得Enum实例,而无需在String和Enum之间进行转换。这样做的好处是您无需担心更改枚举名称或大小写错误。
示例:
public class Enums
{
public enum Days{
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
public String toString() {
//return user-friendly name, or whatever else you want.
//for complex rendering, you need to use cell renderer for the combo box
return name().substring(0,1) + name().toLowerCase().substring(1, name().length());
};
}
public static void main(String[] args) {
JFrame frame = new JFrame("Enum test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JComboBox<Days> combo = new JComboBox<>(Days.values());
combo.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if(e.getStateChange() == ItemEvent.SELECTED){
Days selected = combo.getItemAt(combo.getSelectedIndex());
System.out.println(selected);
}
}
});
frame.add(combo);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
没有类型转换,没有字符串匹配。超级安全。