web-dev-qa-db-ja.com

文字列から列挙型のインデックスを取得しますか?

文字列値があり、文字列の配列と範囲を含む列挙型もあります。配列内の文字列のインデックスを取得するには、指定された値から次のように書きます。

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;
   }
   ...
}
20
Paul

私はあなたを正しく理解しているかどうかはわかりませんが、おそらくあなたは探しています

_YourEnum.valueOf("VALUE").ordinal();
_
  • YourEnum.valueOf("VALUE")は、VALUEという名前の列挙値を返します
  • そして、各列挙値は、ordinal()メソッドを使用して確認できる位置(ゼロからインデックス付けされた)を知っています。
77
Pshemo

私はあなたの質問を理解していないかもしれませんが、同じコードは列挙型でも動作します:

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

または以下を取得できます:

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

この簡単な解決策を試してください。

Fruit.values()[index]
2
Sathishkumar J

インデックスを取得する場合は、序数を使用できます。特定の値を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());
    }
2
Divya Motiwala

次のロジックも機能します。

確認したいが、フルーツ名がすでにforループを使用していないことがわかっている場合は、Pshemoで言及されているアプローチを使用してください

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