当字符串既不匹配枚举值也不匹配名称时,从字符串值到枚举的映射

时间:2019-03-29 12:57:50

标签: java mapstruct

我正在尝试从String值映射到与该字符串值不直接匹配的枚举(即String值为“ I”,并且我想将其映射到Enum值Industry.CREATOR)我没有看到mapstruct中的任何事情都可以做到这一点。

我希望它生成类似以下内容的

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

1 个答案:

答案 0 :(得分:2)

使行业枚举丰富了代码字段,并添加了静态方法,该方法遍历枚举值并返回具有给定代码的枚举值

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");

Quick Guide to MapStruct文章的第6节详细介绍了如何使用Mapper