2013-03-15 9 views
11

Mam wartość ciągu, mam również tablicę ciągów i wyliczenie zawierające również zakres. Aby uzyskać indeks ciąg w tablicy, od wartości dostarczane piszę to:Uzyskaj indeks wyliczenia z ciągu?

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

Jak mogę to zrobić dla wyliczenia? Czy mogę użyć liczby porządkowej? Czy muszę zrobić własną metodę?

Metoda może iść jak:

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

Odpowiedz

56

Nie jestem pewien, czy rozumiem zostanie poprawnie, ale może szukasz

YourEnum.valueOf("VALUE").ordinal(); 
  • YourEnum.valueOf("VALUE") powraca enum wartość o nazwie VALUE
  • i każda wartość wyliczeniowa zna swoją pozycję (indeksowaną od zera), którą możemy zobaczyć za pomocą metody ordinal().
+0

Dzięki za wszystko odpowiedzi chłopaki, to wszystko działa, widocznie to nie był mój problem. Problem polegał na tym, że jeśli przeszukuję bibliotekę, na przykład 9600 w tablicy łańcuchów, działa dobrze. Ale kiedy szukałem tej samej wartości w wyliczeniu, powiedziałem, że nie jest to wartość w wyliczeniu. 03-15 16: 04: 19.925: E/AndroidRuntime (19719): Spowodowane przez: java.lang.IllegalArgumentException: 19200 nie jest stałą w slickdevlabs.apps.usb2seriallib.SlickUSB2Serial $ BaudRate, więc użyję tylko tablicy łańcuchów. .. Nie mam pojęcia, dlaczego tak się dzieje. Na szczęście biblioteka dała również tablicę znaków. – Paul

10

I nie może zrozumieć, że pytanie, ale ten sam kod działa na teksty stałe też:

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

Albo można uzyskać:

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

Jeśli chcesz pobrać indeks, ty może używać ordinal. Jeśli chcesz przypisać określoną wartość do łańcucha, możesz zdefiniować własną metodę jej pobierania.

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

Teraz wartość i porządkowym mogą być odczytane jako:

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

Poniższa logika będzie również działać.

Jeśli chcesz sprawdzić, a wiesz, że fruitname już nie używać dla pętli przejść z podejściem wymienionym przez Pshemo

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

Spróbuj proste rozwiązanie:

Fruit.values()[index] 
Powiązane problemy