Не используйте valueOf()
напрямую.Это с учетом регистра и выдает ошибку, когда не находит соответствующий enum
.
Вам нужно искать поле name , а не поле status :
public static MyEnum fromString(String text) {
return Arrays.stream(values())
.filter(v -> v.name().equalsIgnoreCase(text))
.findFirst()
.orElse(null);
}
}
И как только вы получите enum, вызовите метод getStatus()
для возвратаApproved
:
MyEnum foundEnum = MyEnum.fromString("A");
System.out.println(foundEnum != null ? foundEnum.getStatus() : "- Not found -");
Или используйте Optional
подход:
public static Optional<MyEnum> fromStringOptional(String text) {
try {
return Optional.of(MyEnum.valueOf(text));
} catch (IllegalArgumentException|NullPointerException e) {
return Optional.empty();
}
}
И сделайте
Optional<MyEnum> foundEnum3 = MyEnum.fromStringOptional(searchString);
System.out.println(foundEnum3.map(a -> a.getStatus()).orElse("- Not found -"));
System.out.println(foundEnum3.isPresent() ? foundEnum3.getStatus() : "- Not found -");
Полный пример:
import java.util.Arrays;
import java.util.Optional;
public class EnumDemo {
public enum MyEnum {
A("Approved"),
R("Reject New");
private String status;
private MyEnum(String status) {
this.status = status;
}
public String getStatus() {
return status;
}
public static MyEnum getEnumfromString(String text) {
return Arrays.stream(values())
.filter(v -> v.name().equalsIgnoreCase(text))
.findFirst()
.orElse(null);
}
public static String getStatusfromString(String text) {
MyEnum found = Arrays.stream(values())
.filter(v -> v.name().equalsIgnoreCase(text))
.findFirst()
.orElse(null);
return found != null ? found.getStatus() : "- Not found -";
}
public static Optional<MyEnum> getOptionalfromString(String text) {
try {
return Optional.of(MyEnum.valueOf(text));
} catch (IllegalArgumentException|NullPointerException e) {
return Optional.empty();
}
}
}
public static void doCalls(String searchString) {
System.out.print("Call 1: ");
MyEnum foundEnum = MyEnum.getEnumfromString(searchString);
System.out.println(foundEnum != null ? foundEnum.getStatus() : "- Not found -");
System.out.print("Call 2: ");
System.out.println(MyEnum.getStatusfromString(searchString));
System.out.println("Call 3 :");
System.out.print(" A: ");
Optional<MyEnum> foundOptional = MyEnum.getOptionalfromString(searchString);
System.out.println(foundOptional.map(a -> a.getStatus()).orElse("- Not found -"));
//or this, which only prints if the enum was found
System.out.print(" B: ");
foundOptional.ifPresent(a -> System.out.println(a.getStatus()));
}
public static void main(String[] args) {
System.out.println("Existing enum: 'A'");
doCalls("A");
System.out.println("");
System.out.println("Non-existing enum: 'B'");
doCalls("B");
}
}
Тестовый вывод:
Существующее перечисление: 'A'
Вызов 1: Утверждено
Вызов 2: Утверждено
Вызов 3:
A: Утверждено
B: Утверждено
Несуществующее перечисление: 'B'
Вызов 1: - Не найдено -
Вызов 2: - Не найдено -
Звоните 3:
A: - Не найдено -
B: