web-dev-qa-db-fra.com

Obtenir l'index de l'énumération de la chaîne?

J'ai une valeur de chaîne, j'ai aussi un tableau de chaînes et une énumération contenant la plage également . Pour obtenir l'index de la chaîne dans le tableau, j'écris ceci à partir de la valeur fournie

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

Comment est-ce que je fais ceci pour un enum? Puis-je utiliser l'ordinal? Ou dois-je créer ma propre méthode?

La méthode pourrait ressembler à:

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

Je ne suis pas sûr de bien vous comprendre, mais vous recherchez peut-être

YourEnum.valueOf("VALUE").ordinal();
  • YourEnum.valueOf("VALUE") renvoie la valeur enum avec le nom VALUE
  • et chaque valeur enum connaît sa position (indexée à partir de zéro), ce que nous pouvons voir avec la méthode ordinal().
70
Pshemo

Je peux ne pas comprendre votre question, mais le même code fonctionne aussi pour les enums:

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

Ou vous pouvez obtenir:

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

Essayez cette solution simple:

Fruit.values()[index]
2
Sathishkumar J

Si vous voulez récupérer l'index, vous pouvez utiliser ordinal. Si vous souhaitez attribuer une valeur spécifique à String, vous pouvez définir votre propre méthode pour la récupérer.

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

La valeur et l'ordinal peuvent maintenant être récupérés sous la forme:

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

La logique suivante fonctionnera également.

Si vous voulez vérifier et que vous connaissez déjà le nom du fruit, n'utilisez pas cette boucle, utilisez l'approche indiquée par Pshemo

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