我想使用EnumSet<FooType>
方法将某些String
序列化为toString()
。
例如:EnumSet.of(FooType.COMMON, FooType.MEDIUM).toString()
将提供[COMMON, MEDIUM]
。
问题是关于将此类字符串反序列化回EnumSet<FooSet>
的优雅方法。我正在寻找一些众所周知的库(可能像apache-commons
)或标准的Util-class来处理这类事情。
类似于:EnumSetUtil.valueOf(FooType.class, "[COMMON, MEDIUM]")
我以这种方式实现了这个目标:
public static <E extends Enum<E>> EnumSet<E> valueOf(Class<E> eClass, String str) {
String[] arr = str.substring(1, str.length() - 1).split(",");
EnumSet<E> set = EnumSet.noneOf(eClass);
for (String e : arr) set.add(E.valueOf(eClass, e.trim()));
return set;
}
但是,可能已经有了现成的解决方案,或者是非常简单的方法。
答案 0 :(得分:6)
使用Java 8,您可以使用Lambda expressions和streams:
执行此类操作EnumSet.copyOf(Arrays.asList(str.split(","))
.stream().map(FooType::valueOf).collect(Collectors.toList()))
答案 1 :(得分:0)
使用番石榴19.0:
Iterable<String> i = Splitter.on(",")
.trimResults(CharMatcher.WHITESPACE.or(CharMatcher.anyOf("[]")))
.split(str);
Set<YourEnum> result = FluentIterable.from(i)
.transform(Enums.stringConverter(YourEnum.class)).toSet();
如果您可以接受像['COMMON', 'MEDIUM']
这样的字符串格式,则使用JSON库的其他方式。
答案 2 :(得分:0)
使用Gson(&#39; com.google.code.gson:gson:2.3.1&#39;)库可以:
public static EnumSet getEnumObject(Type type, String jsonStrToDeserialize) {
Gson gson = new Gson();
return jsonStrToDeserialize == null ? null : (EnumSet) gson.fromJson(jsonStrToDeserialize, type);
}