Java 将字符串转换为枚举列表
Java convert a string to list of enums
我有一个字符串如下:
"[Monday, Tuesday]"
我想将此字符串转换为 "Day" 类型的枚举列表。我的 "Day" 枚举如下:
public enum Day {
Monday,Tuesday;
}
我通过在 "Day" 的列表上调用 toString() 获得了我的输入字符串。如下:
List<Day> days = new ArrayList<Day>();
days.add(Day.Monday);
days.add(Day.Tuesday);
String input = days.toString();
我知道我可以通过逗号和括号来解析输入的字符串。但是,有什么有效的方法可以做到这一点吗?
重复一下,我想将字符串转换为枚举列表。
** 编辑 **
问题不仅仅是将字符串转换为枚举,反之亦然。涉及列表和字符串解析。
你可以尝试做类似的事情
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));
}
如果您使用 Java 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);
此外,我们不需要将数组转换为列表,使用更少的代码:
List<Days> days2 = Arrays.stream(stringWithNoBrackets.split(",\s+"))
.map(Days::valueOf)
.collect(Collectors.toList());
你的问题没有多大意义。如果你想发送或存储枚举列表,那么你可以简单地序列化和反序列化它,因为 ArrayList
并且每个 enum
都是 Serializable
.
示例:
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);
输出:[Monday, Tuesday]
.
我有一个字符串如下:
"[Monday, Tuesday]"
我想将此字符串转换为 "Day" 类型的枚举列表。我的 "Day" 枚举如下:
public enum Day {
Monday,Tuesday;
}
我通过在 "Day" 的列表上调用 toString() 获得了我的输入字符串。如下:
List<Day> days = new ArrayList<Day>();
days.add(Day.Monday);
days.add(Day.Tuesday);
String input = days.toString();
我知道我可以通过逗号和括号来解析输入的字符串。但是,有什么有效的方法可以做到这一点吗?
重复一下,我想将字符串转换为枚举列表。
** 编辑 **
问题不仅仅是将字符串转换为枚举,反之亦然。涉及列表和字符串解析。
你可以尝试做类似的事情
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));
}
如果您使用 Java 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);
此外,我们不需要将数组转换为列表,使用更少的代码:
List<Days> days2 = Arrays.stream(stringWithNoBrackets.split(",\s+"))
.map(Days::valueOf)
.collect(Collectors.toList());
你的问题没有多大意义。如果你想发送或存储枚举列表,那么你可以简单地序列化和反序列化它,因为 ArrayList
并且每个 enum
都是 Serializable
.
示例:
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);
输出:[Monday, Tuesday]
.