java枚舉enum,根據value值獲取key鍵的操作
1.ZjlxEnum.java
public enum ZjlxEnum implements IEnum { SFZ("1", "居民身份證"), XGZM("2", "香港特區護照/身份證明"), AMZM("3", "澳門特區護照/身份證明"), TWTXZ("4", "臺灣居民來往大陸通行證"), JWJZZ("5", "境外永久居住證"), HZ("6", "護照"), QT("7", "其他"); private String value; private String label; public String getValue() { return this.value; } public String getLabel() { return this.label; } }
2.調用方式:
private String getZjlx(String zjlxCn) { Optional<ZjlxEnum> m1 = EnumUtil.getEnumObject(ZjlxEnum.class, e -> e.getLabel().equals(zjlxCn)); return m1.isPresent() ? m1.get().getValue() : null; }
3.EnumUtil.java
public class EnumUtil { private static Map<Class, Object> map = new ConcurrentHashMap<>(); /** * 根據條件獲取枚舉對象 * * @param className 枚舉類 * @param predicate 篩選條件 * @param <T> * @return */ public static <T> Optional<T> getEnumObject(Class<T> className, Predicate<T> predicate) { if (!className.isEnum()) { return null; } Object obj = map.get(className); T[] ts = null; if (obj == null) { ts = className.getEnumConstants(); map.put(className, ts); } else { ts = (T[]) obj; } return Arrays.stream(ts).filter(predicate).findAny(); } }
補充:Java遍歷枚舉(Enum)的Value和相對應的Index
遍歷枚舉:
public class ColorIndexTest { @SuppressWarnings("resource") public static void main(String[] args) { // TODO Auto-generated method stub HSSFColorPredefined[] allColor = HSSFColorPredefined.values(); for(int i = 0;i < allColor.length;i++) { System.out.println(allColor[i].name() + " == " + allColor[i].ordinal()); } } }
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。