Строковое значение для сопоставления перечисления, когда строка не совпадает ни со значением перечисления, ни с именем - PullRequest
0 голосов
/ 29 марта 2019

Я пытаюсь отобразить строковое значение в перечисление, которое не соответствует этому строковому значению напрямую (т. Е. Строковое значение равно «I», и я хочу сопоставить это значение перечислению Industry.CREATOR). Я не вижучто-нибудь в mapstruct, чтобы сделать что-то вроде этого.

Я бы хотел, чтобы это генерировало что-то вроде следующего

switch (entityInd) {
            case "I":
                return Industry.CREATOR;
            case "E":
                return Industry.CONSUMER;
            default:
                return null;
        }

1 Ответ

2 голосов
/ 29 марта 2019

Добавьте в перечисление Industry поле для кода и добавьте статический метод, который перебирает значения перечисления и возвращает значение перечисления, имеющее данный код

enum Industry {

    CREATOR("I")/*, here comes more values of the enum*/;

    private String code;

    Industry(String code) {
        this.code = code;
    }

    public static Industry forCode(String code) {

        return Arrays.stream(Industry.values())
                     .filter(industry -> industry.code.equals(code))
                     .findAny()
                     .orElse(null);
    }
}

Для использования необходимо определить Mapper, а в маппере метод 'Industry # forCode` должен быть вызван

Industry industry = Industry.forCode("I");

Раздел 6 из Краткое руководство по MapStruct Статья подробно описывает, как Mapper можно использовать

...