Получение enum по значению конструктора enum - PullRequest
1 голос
/ 21 марта 2020

Как правильно получить перечисление по значению конструктора в java? Вот пример:

public enum Status{
CREATED("created"), IN_PROGRESS("inProgress"), COMPLETED("completed");

public final String statusStr;
Status(String statusStr){
  this.statusStr = statusStr;
}
}

Так что, если вводимый мной текст является строкой «создан», как я могу получить из него Status.CREATED?

1 Ответ

2 голосов
/ 21 марта 2020

Я не думаю, что вы можете сделать это автоматически. Для этого вам нужно будет создать метод stati c:

public static Status fromString(String string) {
    for (Status status : values()) {
        if (status.statusStr.equals(string)) {
            return status;
        }
    }
    throw new IllegalArgumentException(string);
}

С учетом предложений @ Pshemo, код также может быть:

@RequiredArgsConstructor @Getter
public enum Status {
    CREATED("created"), IN_PROGRESS("inProgress"), COMPLETED("completed");

    private static final Map<String, Status> MAP = Arrays.stream(Status.values())
            .collect(Collectors.toMap(Status::getStatusStr, Function.identity()));

    private final String statusStr;

    public static Status fromString(String string) {
        return Objects.requireNonNull(MAP.get(string));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...