2016-02-25 75 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();