【问题标题】:Getting Enum value by another value [duplicate]通过另一个值获取枚举值[重复]
【发布时间】:2020-12-10 03:10:21
【问题描述】:

我有以下enum,其中包含两个值,一个字符串标识符和一个布尔有效状态。我希望能够通过使用字符串标识符来获取状态值。

有没有人有什么建议可以添加到下面的代码中?

public enum MyEnum {

    TYPEA("001", true),
    TYPEB("002", false);
    
    private final String identifier;
    private final boolean valid;

    MyEnum(String identifier, boolean valid) {
        this.identifier = identifier;
        this.valid = valid;
    }
}

【问题讨论】:

标签: java enums


【解决方案1】:

ENUM 类型有 values 方法,您可以使用该方法提取所有枚举值并将其标识符与您通过方法参数传递的标识符进行比较,即:

public MyEnum getEnum(String identifier){
      for(MyEnum e : MyEnum.values())
         if(e.identifier.equals(identifier))
            return e;
      return null;
 }

甚至更好:

public static Optional<MyEnum> getEnum(String identifier){
        return Arrays.stream(MyEnum.values()).filter(i -> i.identifier.equals(identifier)).findFirst();
}

这样你就可以清楚地表明你可能会或找不到枚举的方法签名。

【讨论】:

    【解决方案2】:
    public enum MyEnum {
    
       TYPEA("001", true),
       TYPEB("002", false);
    
       private final String identifier;
       private final boolean valid;
    
       MyEnum(String identifier, boolean valid) {
           this.identifier = identifier;
           this.valid = valid;
       }
    
       public static MyEnum getFromIdentifier(String identifier) {
           return Arrays.stream(MyEnum.values()).filter(item -> item.identifier.equals(identifier)).findFirst().orElse(null);
       }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-11
      • 2023-03-31
      • 2021-07-25
      • 2012-12-28
      • 1970-01-01
      相关资源
      最近更新 更多