枚举工具类
先写一个枚举类
import lombok.Getter;
@Getter
public enum alarmTypeEnum {
TYPE_P0("-1", "告警"),
TYPE_P1("1", "火警"),
TYPE_P2("2", "电流过高"),
TYPE_P3("3", "电流过低");
private String typeId;
private String detail;
alarmTypeEnum(String typeId, String detail) {
this.typeId = typeId;
this.detail = detail;
}
}
再写一个枚举类工具
import java.util.Arrays;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Predicate;
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();
}
}
使用方法
Optional<alarmTypeEnum> object = EnumUtil.getEnumObject( alarmTypeEnum.class, e -> e.getTypeId().equals(alarmEvent.getAlarmTypeId()));
String x = object.get().getDetail();