从String反序列化EnumSet的优雅方法

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)