Java 枚举传参获取值

平常常用的根据传参获取枚举值

public enum SaleTypeStrEnum{
  JX,
  // OTHERS 
  ;
  public static SaleTypeStrEnum getByName(String saleTypeStr){
    for (SaleTypeStrEnum value : SaleTypeStrEnum.values()) {
      if(value.name().equals(saleTypeStr)){
        return value;
      }
    }
    return null;
  }
}

每次传进来值都要遍历整个枚举,O(n)效率太低了,还是老规矩,空间换时间。

public enum SaleTypeStrEnum{
  JX,
  // OTHERS
  ;

  /**
    * 预热转换关系到内存
    */
  private static Map<String, SaleTypeStrEnum> NAME_MAP = Arrays.stream(SaleTypeStrEnum.values()).collect(Collectors.toMap(SaleTypeStrEnum::name, Function.identity()));
  public static SaleTypeStrEnum getByName(String saleTypeStr){
    return NAME_MAP.get(saleTypeStr);
  }
}

以上两种都可以实现,根据使用情况看用哪种

posted @ 2023-12-13 09:07  Kllin  阅读(122)  评论(0编辑  收藏  举报