这是我的问题-我正在寻找(如果它甚至存在)等价于ArrayList.contains();的enum。

下面是我的代码问题示例:

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

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

现在,我意识到字符串的数组列表在这里是更好的路由,但我必须通过其他地方的开关/case运行我的enum内容。这就是我的问题所在。

假设这样的东西不存在,我该怎么做呢?


当前回答

com.google.common.collect.Sets.newHashSet(MyEnum.values()).contains("myValue")

其他回答

如果你想通过String查找,可以使用valueOf("a1")

public boolean contains(Choices value) {
   return EnumSet.allOf(Choices.class).contains(value);
}

这个对我很有用:

Arrays.asList(YourEnum.values()).toString().contains("valueToCheck");

番石榴可以成为你的朋友

比如这个:

enum MyData {
    ONE,
    TWO
}

@Test
public void test() {

    if (!Enums.getIfPresent(MyData.class, "THREE").isPresent()) {
        System.out.println("THREE is not here");
    }
}

这种方法可以用来检查任何Enum,你可以把它添加到一个Utils类:

public static <T extends Enum<T>> boolean enumContains(Class<T> enumerator, String value)
{
    for (T c : enumerator.getEnumConstants()) {
        if (c.name().equals(value)) {
            return true;
        }
    }
    return false;
}

可以这样用:

boolean isContained = Utils.enumContains(choices.class, "value");