2013-03-15 15 views
11

Ho un valore stringa, ho anche un array di stringhe e un enum che contiene anche l'intervallo. per ottenere l'indice della stringa nella matrice, dal valore fornito scrivo questo:Ottieni l'indice di enum dalla stringa?

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

come faccio a fare questo per un enum? Posso usare ordinale? O devo fare il mio metodo?

Il metodo potrebbe andare così:

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

risposta

56

Non sono sicuro se ho capito bene, ma forse siete alla ricerca di

YourEnum.valueOf("VALUE").ordinal(); 
  • YourEnum.valueOf("VALUE") restituisce valore enum con nome VALUE
  • e ogni valore enum conosce la sua posizione (indicizzata da zero) che possiamo vedere usando il metodo ordinal().
+0

Grazie per tutto il risponde ragazzi, tutti funzionano, a quanto pare non era un mio problema. Il problema era che se cerco la libreria, per esempio 9600 nella serie di stringhe, funziona perfettamente. Ma quando stavo cercando lo stesso valore nell'enum diceva che non era un valore nell'enumerazione. 03-15 16: 04: 19.925: E/AndroidRuntime (19719): Causato da: java.lang.IllegalArgumentException: 19200 non è una costante in slickdevlabs.apps.usb2seriallib.SlickUSB2Serial $ BaudRate, quindi userò semplicemente l'array di stringhe. .. Non ho idea del perché questo è il caso. Fortunatamente la libreria ha fornito anche una serie di stringhe. – Paul

10

potrei non capire si mette in discussione, ma lo stesso codice funziona per enumerazioni troppo:

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

Oppure si può ottenere:

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

Se si desidera recuperare l'indice, è può usare ordinale. Se si desidera assegnare un valore specifico a String, è possibile definire il proprio metodo per recuperarlo.

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

Ora valore e ordinale possono essere recuperate come:

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

La seguente logica sarà anche funzionare.

Se si desidera controllare e si conosce il fruitname già non utilizzare ciclo for andare con l'approccio di cui parla Pshemo

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

Provate questa semplice soluzione:

Fruit.values()[index]