Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как преобразовать строку в enum и перебрать значения

Короткий ответ

valueOf() находит константу по имени, name() возвращает имя обратно:

enum Status { NEW, PAID, SHIPPED }
 
void main() {
    Status status = Status.valueOf("PAID");
 
    IO.println(status);
    IO.println(status.name().toLowerCase());
}

Результат:

PAID
paid

Все значения

values() возвращает массив всех констант в порядке объявления, ordinal() — номер константы:

enum Status { NEW, PAID, SHIPPED }
 
void main() {
    for (Status s : Status.values()) {
        IO.println(s.ordinal() + " " + s);
    }
}

Результат:

0 NEW
1 PAID
2 SHIPPED

Безопасное преобразование

Для пользовательского ввода приведите строку к верхнему регистру и обработайте неизвестное значение:

enum Status { NEW, PAID, SHIPPED }
 
Optional<Status> parse(String text) {
    try {
        return Optional.of(Status.valueOf(text.strip().toUpperCase(Locale.ROOT)));
    } catch (IllegalArgumentException e) {
        return Optional.empty();
    }
}
 
void main() {
    IO.println(parse(" paid "));
    IO.println(parse("lost"));
}

Результат:

Optional[PAID]
Optional.empty

Своё поле

Константы могут хранить данные — например, подпись для интерфейса:

enum Size {
    S("Small"), M("Medium"), L("Large");
 
    private final String label;
 
    Size(String label) {
        this.label = label;
    }
 
    static Size fromLabel(String label) {
        return Arrays.stream(values()).filter(s -> s.label.equals(label)).findFirst().orElseThrow();
    }
}
 
void main() {
    IO.println(Size.fromLabel("Medium"));
}

Результат:

M

Частая ошибка

valueOf() учитывает регистр и выбрасывает исключение для неизвестного имени:

enum Status { NEW, PAID, SHIPPED }
 
void main() {
    Status.valueOf("paid");
}

Результат:

Exception in thread "main" java.lang.IllegalArgumentException: No enum constant Main.Status.paid

Функции из этого ответа

  • enum — Объявляет перечисление — тип с фиксированным набором значений.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.