Java: Проверить, содержит ли enum заданную строку? - PullRequest
134 голосов
/ 08 февраля 2011

Вот моя проблема - я ищу (если он вообще существует) эквивалент перечисления ArrayList.contains();.

Вот пример моей проблемы с кодом:

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

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

СейчасЯ понимаю, что ArrayList из Strings будет лучшим маршрутом здесь, но мне нужно пропустить содержимое моего перечисления через переключатель / регистр в другом месте.Отсюда моя проблема.

Если предположить, что чего-то подобного не существует, как я могу это сделать?

Ответы [ 26 ]

3 голосов
/ 08 февраля 2011

Я не думаю, что есть, но вы можете сделать что-то вроде этого:

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

public static boolean exists(choices choice) {
   for(choice aChoice : choices.values()) {
      if(aChoice == choice) {
         return true;
      }
   }
   return false;
}

Редактировать:

Пожалуйста, ознакомьтесь с версией Ричарда об этом, так как это более уместно, так как это выигралоне будет работать, если вы не конвертируете его в строки, что делает Ричардс.

2 голосов
/ 27 июня 2018

Это работает для меня:

Arrays.asList(YourEnum.values()).toString().contains("valueToCheck");
2 голосов
/ 26 сентября 2016

Если вы используете Apache Commons (или хотите это сделать), вы можете проверить это с помощью:

ArrayUtils.contains(choices.values(), value)
2 голосов
/ 16 апреля 2012

Почему бы не объединить ответ Пабло со значениемOf ()?

public enum Choices
{
    a1, a2, b1, b2;

    public static boolean contains(String s) {
        try {
            Choices.valueOf(s);
            return true;
        } catch (Exception e) {
            return false;
        }
}
1 голос
/ 14 апреля 2019

Я создал следующий класс для этой проверки

public class EnumUtils {

    public static boolean isPresent(Enum enumArray[], String name) {
        for (Enum element: enumArray ) {
            if(element.toString().equals(name))
                return true;
        }
        return false;
    }

}

пример использования:

public ArrivalEnum findArrivalEnum(String name) {

    if (!EnumUtils.isPresent(ArrivalEnum.values(), name))
        throw new EnumConstantNotPresentException(ArrivalEnum.class,"Arrival value must be 'FROM_AIRPORT' or 'TO_AIRPORT' ");

    return ArrivalEnum.valueOf(name);
}
1 голос
/ 24 февраля 2017

Этот подход может использоваться для проверки любого 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");
0 голосов
/ 14 июля 2017

решение для проверки наличия значения, а также возвращаемое значение перечисления:

protected TradeType getEnumType(String tradeType) {
    if (tradeType != null) {
        if (EnumUtils.isValidEnum(TradeType.class, tradeType)) {
            return TradeType.valueOf(tradeType);
        }
    }
    return null;
}
0 голосов
/ 08 февраля 2011

Вы можете использовать valueOf("a1"), если хотите посмотреть по строке

0 голосов
/ 08 февраля 2011

Это перечисление, это постоянные значения, поэтому, если в операторе switch он просто делает что-то вроде этого:

case: val1
case: val2

Кроме того, зачем вам знать, что объявлено как константа?

0 голосов
/ 22 апреля 2016
com.google.common.collect.Sets.newHashSet(MyEnum.values()).contains("myValue")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...