7

そのメソッドEnumSet<FooType>を使用していくつかをシリアライズしたいと思います。StringtoString()

例:EnumSet.of(FooType.COMMON, FooType.MEDIUM).toString()を与え[COMMON, MEDIUM]ます。

問題は、そのような文字列をデシリアライズして に戻すエレガントな方法についてEnumSet<FooSet>です。私はいくつかの一般的に知られているライブラリ (のようなものかもしれませんapache-commons) またはそのようなもののための標準の Util クラスを探しています。

何かのようなもの: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;
}

しかし、すぐに使える解決策、またはこれを行うための劇的に簡単な方法があるかもしれません。

4

3 に答える 3

7

Java 8 では、 Lambda 式とストリームを使用して次のようなことができます。

EnumSet.copyOf(Arrays.asList(str.split(","))
.stream().map(FooType::valueOf).collect(Collectors.toList()))
于 2015-07-31T10:50:10.963 に答える
0

Gson ('com.google.code.gson:gson:2.3.1') ライブラリを使用すると、次のことができます。

public static EnumSet getEnumObject(Type type, String jsonStrToDeserialize) {
    Gson gson = new Gson();
    return jsonStrToDeserialize == null ? null : (EnumSet) gson.fromJson(jsonStrToDeserialize, type);
}
于 2016-03-16T08:04:48.080 に答える
0

With guava 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();

OR another way with JSON library if you can accept String format like this ['COMMON', 'MEDIUM'].

于 2015-11-05T08:18:54.180 に答える