Java:检查枚举是否包含给定的字符串?

问题

这是我的问题......我正在寻找(如果它存在)枚举等效于ArrayList.contains();.

这是我的代码问题的示例:

enum choices {a1, a2, b1, b2};

if(choices.???(a1)}{
//do this
}

现在,我意识到字符串的ArrayList将是更好的路径,但我必须通过其他地方的开关/案例运行我的枚举内容。因此我的问题。

假设不存在这样的事情,我怎么能去做呢?

谢谢!


#1 热门回答(152 赞)

请改用Apache commons lang3 lib

EnumUtils.isValidEnum(MyEnum.class, myValue)

#2 热门回答(135 赞)

这应该这样做:

public static boolean contains(String test) {

    for (Choice c : Choice.values()) {
        if (c.name().equals(test)) {
            return true;
        }
    }

    return false;
}

这种方式意味着你不必担心以后添加额外的枚举值,它们都会被检查。

编辑:如果枚举非常大,你可以将值粘贴在HashSet中:

public static HashSet<String> getEnums() {

  HashSet<String> values = new HashSet<String>();

  for (Choice c : Choice.values()) {
      values.add(c.name());
  }

  return values;
}

然后你可以这样做:values.contains("your string")返回true或false。


#3 热门回答(38 赞)

你可以使用Enum.valueOf

enum Choices{A1, A2, B1, B2};

public class MainClass {
  public static void main(String args[]) {
    Choices day;

    try {
       day = Choices.valueOf("A1");
       //yes
    } catch (IllegalArgumentException ex) {  
        //nope
  }
}

如果你希望检查经常失败,你可能最好使用其他已显示的简单循环 - 如果你的枚举包含多个值,可能是builda HashSet或类似的枚举值转换为字符串并查询HashSet,