Получение значения Enum по другому значению

У меня есть следующий enum, который содержит два значения, строковый идентификатор и логический действительный статус. Я хотел бы иметь возможность получить значение статуса, используя идентификатор строки.

У кого-нибудь есть предложения, что я могу добавить в код ниже?

public enum MyEnum {

    TYPEA("001", true),
    TYPEB("002", false);
    
    private final String identifier;
    private final boolean valid;

    MyEnum(String identifier, boolean valid) {
        this.identifier = identifier;
        this.valid = valid;
    }
}

Отвечает ли это на ваш вопрос? Как получить тип перечисления по его атрибуту?

kasptom 09.12.2020 17:20

Нет, я пытаюсь получить значение перечисления по другому значению перечисления.

user2254180 09.12.2020 17:21
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
2
534
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

public enum MyEnum {

   TYPEA("001", true),
   TYPEB("002", false);

   private final String identifier;
   private final boolean valid;

   MyEnum(String identifier, boolean valid) {
       this.identifier = identifier;
       this.valid = valid;
   }

   public static MyEnum getFromIdentifier(String identifier) {
       return Arrays.stream(MyEnum.values()).filter(item -> item.identifier.equals(identifier)).findFirst().orElse(null);
   }
}
Ответ принят как подходящий

Типы ENUM имеют метод values, который вы можете использовать для извлечения всех значений перечисления и сравнения их идентификатора с тем, который вы передали параметром метода, а именно:

public MyEnum getEnum(String identifier){
      for(MyEnum e : MyEnum.values())
         if (e.identifier.equals(identifier))
            return e;
      return null;
 }

или еще лучше:

public static Optional<MyEnum> getEnum(String identifier){
        return Arrays.stream(MyEnum.values()).filter(i -> i.identifier.equals(identifier)).findFirst();
}

Таким образом, вы четко указываете в сигнатуре метода, что вы можете найти или не найти перечисление.

Другие вопросы по теме