33

我有一个字符串值,我还有一个字符串数组和一个包含范围的枚举。为了获取数组中字符串的索引,从提供的值中我写了这个:

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;
   }
   ...
}
4

5 回答 5

113

不确定我是否正确理解您,但根据您可能正在寻找的问题标题

YourEnum.valueOf("VALUE").ordinal();
  1. YourEnum.valueOf("VALUE")返回带有名称的枚举"VALUE"
  2. 每个枚举都知道它的位置(从零开始索引),我们可以通过调用它的ordinal()方法来获得它。
于 2013-03-15T15:56:50.527 回答
14

我可能不明白你的问题,但同样的代码也适用于枚举:

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

或者你可以得到:

int index = YourEnum.valueOf("ENUM_ITEM").ordinal();
于 2013-03-15T15:57:48.200 回答
7

试试这个简单的解决方案:

Fruit.values()[index]
于 2017-06-20T11:43:00.447 回答
2

如果要检索索引,可以使用序数。如果您想为 String 分配一些特定的值,您可以定义自己的方法来检索它。

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

现在 value 和 ordinal 可以检索为:

    for(DAY s : DAY.values() )
    {
        System.out.println(s.ordinal());
        System.out.println(s.getValue());
    }
于 2013-03-15T16:02:28.483 回答
0

以下逻辑也将起作用。

如果您想检查并且您知道水果名称已经不使用 for 循环,请使用 Pshemo 提到的方法

for (Fruit aFruit : aFruits)
           if (aFruit.name().equals(aName))
               return aFruit.ordinal();
于 2017-06-16T06:14:12.103 回答