And*_*niy 6 java enums enumset
我想序列化一些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;
}
Run Code Online (Sandbox Code Playgroud)
但是,可能有现成的解决方案,或者这样做非常简单的方法.
小智 6
使用Java 8,您可以使用Lambda表达式和流执行类似的操作:
EnumSet.copyOf(Arrays.asList(str.split(","))
.stream().map(FooType::valueOf).collect(Collectors.toList()))
Run Code Online (Sandbox Code Playgroud)