Подтвердить что ты не робот

Получить индекс перечисления из строки?

У меня есть строковое значение, у меня также есть массив строк и перечисление, содержащее диапазон. Чтобы получить индекс строки в массиве, из предоставленного значения я пишу это:

Arrays.asList(myClass.BAUD_RATES).indexOf(username)

Как это сделать для перечисления? Могу ли я использовать порядковый номер? Или мне нужно сделать свой собственный метод?

Метод может выглядеть так:

public enum Fruit {
   ...
   static public boolean isMember(String aName) {
       Fruit[] aFruits = Fruit.values();
       for (Fruit aFruit : aFruits)
           if (aFruit.fruitname.equals(aName))
               return aFruit;
       return false;
   }
   ...
}
4b9b3361

Ответ 1

Не уверен, правильно ли я вас понимаю, но, возможно, вы ищете

YourEnum.valueOf("VALUE").ordinal();
  • YourEnum.valueOf("VALUE") возвращает значение перечисления с именем VALUE
  • и каждое значение перечисления знает свою позицию (индексируется с нуля), которую мы можем увидеть с помощью метода ordinal().

Ответ 2

Я не понимаю вас, но тот же код работает и для перечислений:

int index = Arrays.asList(YourEnum.values()).indexOf(YourEnum.ENUM_ITEM);

Или вы можете получить:

int index = YourEnum.valueOf("ENUM_ITEM").ordinal();

Ответ 3

Если вы хотите получить индекс, вы можете использовать порядковый номер. Если вы хотите назначить определенное значение для String, вы можете определить свой собственный метод для его получения.

 enum DAY
 {
  MONDAY(10),
  TUESDAY(20);
  int value;
  DAY(int x)
  {
   this.value = x;
  }
  public int getValue()
  {
    return value;
   }

Теперь значение и порядковый номер можно получить как:

    for(DAY s : DAY.values() )
    {
        System.out.println(s.ordinal());
        System.out.println(s.getValue());
    }

Ответ 4

Попробуйте это простое решение:

Fruit.values()[index]

Ответ 5

Также будет работать следующая логика.

Если вы хотите проверить, и знаете, что имя фрукта уже не используется для цикла, используйте подход, описанный Pshemo

for (Fruit aFruit : aFruits)
           if (aFruit.name().equals(aName))
               return aFruit.ordinal();