【问题标题】:How to build enum in Java use key int and value as string [duplicate]如何在Java中构建枚举使用键int和值作为字符串[重复]
【发布时间】:2020-11-11 05:59:45
【问题描述】:

我有这样的数据

11 种作物
12 种植园
13 畜牧业
14 渔业

我尝试过构建一个这样的枚举类:

public enum SubSectorEnum {
    Crops(11), 
    Plantation(12);
}

我想要的是,如果我有数据 11 或 12,我想将其转换为作物或种植园。我的问题是,数据存储在我只有 11 或 12 作为 int 的数据库中。我需要的是从 int 11 和 12 转换为 Crops 或 Plantation。如何转换?

【问题讨论】:

标签: java enums


【解决方案1】:

您可以使用两种简单的方法,具体取决于您要使用的逻辑

我建议使用第二个

public enum SubSectorEnum {

    Crops(11), Plantation(12);

    public int id;

    SubSectorEnum(int id) {
        this.id = id;
    }

    public int getId() {
        return id;
    }

    // 1 approach using switch 
    public SubSectorEnum convertIdToEnum(int id) {
        SubSectorEnum subSectorEnum = Crops; // Default
        switch (id) {
        case 11:
            subSectorEnum = Crops;
            break;
        case 12:
            subSectorEnum = Plantation;
            break;
        default:

            break;
        }
        return subSectorEnum;
    }

    // 2 approach using a map 
    private static final Map<Integer, SubSectorEnum> map = new HashMap<Integer, SubSectorEnum>();
    static {
        for (SubSectorEnum subSectorEnum : SubSectorEnum.values())
            map.put(subSectorEnum.getId(), subSectorEnum);
    }

    public static SubSectorEnum getEnumFromMap(int id) {
        return map.get(id);
    }

}

如果您的数据库中只有这两个值,并且您总是得到 11 或 12,并且您不打算将来添加任何内容,则可以使用以下方法。

public SubSectorEnum getEnumById(int id) {
        return id==Crops.getId()?Crops:Plantation;
    }

【讨论】:

    【解决方案2】:

    如果稍后添加更多枚举值,一个简单的查找可以遍历values() 列表以找到合适的匹配:

    public static SubSectorEnum findById(int id) {
        for (SubSectorEnum sse : values())
            if(id == sse.getId())
                return sse;
        throw new IllegalArgumentException("No SubSectorEnum with id "+id);
    }
    

    【讨论】:

      【解决方案3】:

      如果我了解您需要什么,我认为这是一个带有键值的枚举:

      enum SubSectorEnum  {
      
      Crops(11, "Crops"), Plantation(2, "Plantation");
      
      private final int key;
      private final String value;
      
      SubSectorEnum(int key, String value) {
          this.key = key;
          this.value = value;
      }
      
      public int getKey() {
          return key;
      }
      public String getValue() {
          return value;
      }
      

      }

      这样你就可以拿到值或者key之后:

      SubSectorEnum.Crops.getValue();
      SubSectorEnum.Crops.getKey();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-17
        • 1970-01-01
        • 2014-02-02
        • 2015-04-12
        • 2023-03-28
        相关资源
        最近更新 更多