欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

根据code值直接获取Enum类型

程序员文章站 2022-09-02 17:29:46
根据code值直接获取Enum类型public enum CupType {BIGCUP(1,"大杯"),MEDIUMCUP(2,"中杯"),LITTLECUP(3,"小杯"),;private int code ;private String msg;CupType (int code ,String msg){ this.code = code; this.msg = msg;}private static Map...

根据code值直接获取Enum类型

通过缓存相应的code以及msg对应的Enum,可以直接通过static方法获取相应的Enum类型,减少每次通过循环vlues来获取对应的枚举值。

public enum CupType {

BIGCUP(1,"大杯"),
MEDIUMCUP(2,"中杯"),
LITTLECUP(3,"小杯"),
;

private int code ;
private String msg;

CupType (int code ,String msg){
    this.code = code;
    this.msg = msg;
}

private static Map<Integer,CupType> integerCupTypeMap;

private static Map<String ,CupType> stringCupTypeMap;

static{
    integerCupTypeMap = Arrays.asList(values()).stream().collect(Collectors.toMap(CupType::getCode, UnaryOperator.identity()));
    stringCupTypeMap = Arrays.asList(values()).stream().collect(Collectors.toMap(CupType::getMsg,UnaryOperator.identity()));
}

public static Optional<CupType> getCupTypeByCode(int code){
    return Optional.ofNullable(integerCupTypeMap.get(code));
}

public static Optional<CupType> getCupTypeByMsg(String msg){
    return Optional.ofNullable(stringCupTypeMap.get(msg));
}

public int getCode() {
    return code;
}

public String getMsg() {
    return msg;
}

}

通过缓存相应的code以及msg对应的Enum,可以直接通过static方法获取相应的Enum类型,减少每次通过循环vlues来获取对应的枚举值。

测试代码:

public static void main(String[] args) {
    Optional<CupType> cupType1 = CupType.getCupTypeByCode(1);
    Optional<CupType> cupTypeMsg = CupType.getCupTypeByMsg("小杯");

    System.out.println(cupType1.isPresent() ? cupType1.get().getCode() + "代表" +cupType1.get().getMsg() : " 没有取到相应的枚举");
    System.out.println(cupType1.isPresent() ? cupTypeMsg.get().getCode() + "代表" +cupTypeMsg.get().getMsg() : " 没有取到相应的枚举");

}

本文地址:https://blog.csdn.net/lianglaowen/article/details/110823886

相关标签: java