Получить индекс перечисления из строки?
У меня есть строковое значение, у меня также есть массив строк и перечисление, содержащее диапазон.
Чтобы получить индекс строки в массиве, из предоставленного значения я пишу это:
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;
}
...
}
Ответы
Ответ 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();