2016-02-25 73 views
1

我有枚舉像下面如何從java中的值獲取枚舉構造函數名稱?

enum Car { 
    lamborghini("900"),tata("2"),audi("50"),fiat("15"),honda("12"); 
    private String price; 
    Car(String p) { 
     price = p; 
    } 
    String getPrice() { 
     return price; 
    } 
} 

public class Main { 
    public static void main(String args[]){ 
     System.out.println("All car prices:"); 
     System.out.println(Car.valueOf("lamborghini").getPrice()); 

     for (Car c : Car.values()) 
      System.out.println(c + " costs " 
           + c.getPrice() + " thousand dollars."); 
    } 
} 

這是工作正常,但我有一樣的輸入「900」,所以我想拿到enumConstructorName像蘭博基尼,我怎樣才能做到這一點。

+1

的[將字符串轉換爲Java中的枚舉]可能的複製(http://stackoverflow.com/questions/604424/convert-a- string-to-an-enum-in-java) – wero

+0

有沒有直接的方法來做到這一點。您必須遍歷每一個,並將您的輸入與價格進行比較。 – resueman

+1

通過遍歷所有車輛,找到價格爲「900」的車輛。 –

回答

4
Optional<Car> car = Arrays.stream(Car.values()) 
    .filter(c -> c.getPrice().equals(input)) 
    .findFirst(); 
+2

優秀使用Java 8 Streams和過濾器函數@andrucz! @resueman在問題的評論中是正確的。您必須迭代所有元素並進行比較。儘管如此,Java 8流更容易實現。 – aaiezza

+1

我喜歡它使用可選。它處理用戶非常好地尋找非易失性價格的情況。 – emory

0

最有效的方法是有一個地圖,你可以查找。

static final Map<String, Car> priceMap = values().stream() 
            .collect(Collectors.toMap(c -> c.getPrice(), c -> c)); 

public static Car lookupPrice(String s) { 
    return priceMap.get(s); 
} 

但是,我會在類似int或double的字段中存儲一個數字。

0

這將返回枚舉的名稱:

Car.lamborghini.name();