通过另一个值获取枚举值

yhxst69z  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(347)

这个问题在这里已经有答案了

如何通过属性获取枚举类型(11个答案)
通过内部字段获取枚举(5个答案)
我能根据它的字段值得到一个枚举吗(4个答案)
java获取给定枚举值的枚举名(5个答案)
上个月关门了。
我有以下几点 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;
    }
}
piztneat

piztneat1#

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);
   }
}
hfyxw5xn

hfyxw5xn2#

枚举类型具有 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();
}

这样,您就可以在方法签名上清楚地表明您可能找到枚举,也可能找不到枚举。

相关问题