VER: Java8 ⬆
enum 에 멤버변수를 추가해서 사용할때 멤버변수 값으로 enum 값을 찾고 싶었다.
예를 들어 다음과 같은 enum이 있다고 해보자.
public enum Food{
RAMYUN(0,5000),
UDON(1,6000),
KIMBAB(2,3500),
TOPOKKI(3,4000),
PORK_CUTLET(4,8000);
private final int code;
private final int price;
Food(int code, int price) {
this.code = code;
this.price = price;
}
public int getCode() {
return code;
}
public int getPrice(){
return price;
}
}
사용자가 선택한 메뉴를 숫자로 주고받기로 약속했다면 메뉴를 선택할 때 0,1,2 ... 와 같은 값을 받을 것이다.
이렇게 받은 값을 토대로 해당 메뉴의 가격을 알아내고 싶다면?
개인적으로 값을 비교할땐 enum을 선호하기에 자바에선 이런 경우에 어떻게 할 수 있을지 궁금했다.
enum 내부에서 switch문을 노가다 하는 것 또한 방법이겠지만, enum의 값이 많아질수록 고통스러워 질 것이다.
stream 과 values() 를 사용하면 손쉽게 멤버변수로 원하는 enum 값을 찾을 수 있다.
public static Food of(final int code){
return Arrays.stream(values())
.filter(val -> code == val.code)
.findFirst()
.orElse(null);
}
메뉴에 대한 가격은 다음처럼 얻을 수 있다.
public static int getChosenFoodPrice(int code){
Food food = Food.of(code);
return food.getPrice();
}
메뉴에 해당하는 가격을 알아내기 위해 조건을 비교할 필요가 없어졌다.
public static void main(String[] args) {
System.out.println(Food.getChosenFoodPrice(2) + "원");
}