Java: Как назначить String ArrayList в Список <Enum> - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть класс Enum, где у каждого Enum есть строковое значение.

Я хочу создать список <> с моим типом Enum из списка.Здесь строки являются значениями перечислений.

Можно ли назначить их непосредственно во время инициализации?Если да, каков наилучший способ сделать это?

вот пример кода:

public class SomeController {

    public enum MyEnum {
        A("a"),
        B("b"),
        C("c");

        private final String value;

        MyEnum(String value) {
            this.value = value;
        }
    }

    public String handler(
            @RequestParam(name = "enumList") List<MyEnum> myEnumList ) {

        //do something with myEnumList

        return "something";
    }

}

PS Мне нужно напрямую назначить String-list для MyEnum-listкак указано выше.Я не могу сделать цикл в списке строк и добавить один за другим.

Ответы [ 3 ]

0 голосов
/ 18 февраля 2019

Если вы используете Java 8 и если stringList содержит имена перечислений;

List<MyEnum> myenums = stringList
        .stream()
        .map(MyEnum::valueOf)
        .collect(Collectors.toList());
0 голосов
/ 18 февраля 2019

Вы можете сделать что-то вроде этого:

public static <T extends Enum<T>> List<T> toEnumList(
        Iterable<String> strings, Class<T> clazz) {
    List<T> result = new ArrayList<>();
    for (String s : strings) {
        result.add(Enum.valueOf(clazz, s));
    }
    return result;
}

Работает с любым типом перечисления.

0 голосов
/ 18 февраля 2019

Сначала создайте карту всех констант перечисления внутри вашего перечисления:

private static final Map<String, MyEnum> CONSTANTS = Arrays.stream(values())
    .collect(Collectors.toMap(e -> e.value, e -> e));

А затем создайте метод поиска с @JsonCreator в вашем перечислении:

@JsonCreator
public static MyEnum fromValue(String value) {
   MyEnum myEnum = CONSTANTS.get(value);
   if(myEnum == null) {
       throw new NoSuchElementException(value);
   }
   return myEnum;
}

Джексон будетопределить метод json creator и использовать его для преобразования вашего списка строк в список перечислений (все это делается даже до ввода вашего handler метода)

...