import java.util.EnumSet;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public enum EnumDemo {
PENDING_TO_VISIT(1, "待开始"),
TO_VISIT(2, "工作中"),
VISITED(3, "已完成");
private Integer code;
private String name;
/**
* 存放所有的code和enum的转换.
*/
private static final Map<Integer, EnumDemo> CLINIC_VISIT_STATUS_ENUM_MAP = new ConcurrentHashMap<Integer, EnumDemo>(
EnumDemo.values().length);
EnumDemo(Integer code, String name) {
this.code = code;
this.name = name;
}
static {
/**
* 将所有的实体类放入到map中,提供查询.
*/
for (EnumDemo cardType : EnumSet.allOf(EnumDemo.class)) {
CLINIC_VISIT_STATUS_ENUM_MAP.put(cardType.code, cardType);
}
//{1=PENDING_TO_VISIT, 2=TO_VISIT, 3=VISITED}
//System.out.println(CLINIC_VISIT_STATUS_ENUM_MAP);
/* for (EnumDemo EnumDemo : EnumDemo.values()) {//和上面的方式完全等价
CLINIC_VISIT_STATUS_ENUM_MAP.put(EnumDemo.getCode(), EnumDemo);
}
//{1=PENDING_TO_VISIT, 2=TO_VISIT, 3=VISITED}
System.out.println(CLINIC_VISIT_STATUS_ENUM_MAP);*/
}
public Integer getCode() {
return code;
}
public String getName() {
return name;
}
// 根据类型获取枚举
public static EnumDemo getByCode(Integer code) {
return CLINIC_VISIT_STATUS_ENUM_MAP.get(code);
}
//获取enum集合
public static Map<Integer, String> gainList() {
Map<Integer, String> map = new LinkedHashMap<>();
for (EnumDemo c : EnumDemo.values()) {
map.put(c.getCode(), c.getName());
}
return map;
}
public static void main(String[] args) {
//具体值
String byCode = EnumDemo.PENDING_TO_VISIT.getByCode(1).getName();//主要为了code获取name
//获取状态code
Integer code = EnumDemo.PENDING_TO_VISIT.getCode();
System.out.println(byCode);//待开始
System.out.println(CLINIC_VISIT_STATUS_ENUM_MAP);//{1=PENDING_TO_VISIT, 2=TO_VISIT, 3=VISITED}
System.out.println(code);//1
Map<Integer, String> gainList = EnumDemo.gainList();
System.out.println(gainList);//{1=待开始, 2=工作中, 3=已完成}
}
}