У меня есть следующий 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;
}
}
Нет, я пытаюсь получить значение перечисления по другому значению перечисления.
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();
}
Таким образом, вы четко указываете в сигнатуре метода, что вы можете найти или не найти перечисление.
Отвечает ли это на ваш вопрос? Как получить тип перечисления по его атрибуту?