Java convert a string to list of enums
本问题已经有最佳答案,请猛点这里访问。
我有一个字符串,如下所示:
| 1 | "[Monday, Tuesday]" | 
我要将此字符串转换为"day"类型的枚举列表。我的"day"枚举如下:
| 1 2 3 | public enum Day { Monday,Tuesday; } | 
我通过调用"day"列表上的toString()获得了输入字符串。如下所示:
| 1 2 3 4 5 | List<Day> days = new ArrayList<Day>(); days.add(Day.Monday); days.add(Day.Tuesday); String input = days.toString(); | 
我知道我可以用逗号和括号来解析输入字符串。但是,有什么有效的方法来做到这一点吗?
重复,我想将字符串转换为枚举列表。
**编辑**
问题不仅仅在于如何将字符串转换为枚举,反之亦然。它涉及列表和字符串解析。
如果您使用Java 8:
| 1 2 3 4 5 6 7 8 | //assume your Day enum has more values String string ="[Monday, Wednesday, Tuesday, Friday, Thursday]"; String stringWithNoBrackets = string.substring(1, string.length() - 1); List<Days> days = Arrays.asList(stringWithNoBrackets.split(",\\s+")) .stream() .map(Days::valueOf) .collect(Collectors.toList()); System.out.println(days); | 
此外,我们不需要使用更少的代码将数组转换为列表:
| 1 2 3 | List<Days> days2 = Arrays.stream(stringWithNoBrackets.split(",\\s+")) .map(Days::valueOf) .collect(Collectors.toList()); | 
你的问题没有多大意义。如果要发送或存储枚举列表,则可以简单地对其进行序列化和反序列化,因为
例子:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | List<Day> ofiginalList = new ArrayList<Day>(); ofiginalList.add(Day.Monday); ofiginalList.add(Day.Tuesday); ByteArrayOutputStream bout = new ByteArrayOutputStream(); ObjectOutput out = new ObjectOutputStream(bout); out.writeObject(ofiginalList); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInput in = new ObjectInputStream(bin); List<Day> deserializedList = (List<Day>) in.readObject(); System.out.println(deserializedList); | 
输出:
你可以尝试做一些类似的事情
| 1 2 3 4 5 6 | List<Day> days = new ArrayList<>(); StringTokenizer tokenizer = new StringTokenizer("[Monday, Tuesday]","[],"); while (st.hasMoreTokens()) { String token = st.nextToken(); days.add(Day.valueOf(Day.class, token)); } |