Java 在枚举内搜索

Java 在枚举内搜索,java,enums,Java,Enums,我有一个枚举,其中包含映射到名称和整数的字符串集合。我想根据枚举中的字符串返回整数 我还将枚举用于其他目的,因此我希望保留它,否则我将仅使用HashMap。有可能吗 这是一个例子,展示了我想要实现的目标 public enum Types { A("a.micro", 1), B("b.small", 2), C("c.medium", 4); private String type; private int size; private Type(String type, int

我有一个枚举,其中包含映射到名称和整数的字符串集合。我想根据枚举中的字符串返回整数

我还将枚举用于其他目的,因此我希望保留它,否则我将仅使用HashMap。有可能吗

这是一个例子,展示了我想要实现的目标

public enum Types {

 A("a.micro", 1), B("b.small", 2), C("c.medium", 4);

private String type;
  private int size;

  private Type(String type, int size) {
    this.type = type;
    this.size = size;
  }

  public String getType() {
    return type;
  }

  public int getSize() {
    return size;
  }
}
我想返回基于类型的尺寸:

Type.valueOf("a.micro").getSize();

您可以使用以下内容:

public static int sizeFor(String name) {
    for(Types type : Types.values()) {
        if(type.getType().equals(name)) {
            return type.getSize();
        }
    }
    // handle invalid name
    return 0;
}
另一个选项是添加私有静态映射size=newhashmap;在构造函数中放置类型和映射。然后sizeForString只需进行简单的查找

private static Map<String, Integer> sizes = new HashMap<>();

Type(String type, int size) {
    this.type = type;
    this.size = size;
    sizes.put(type, size);
}

public static int sizeFor(String name) {
    // Modify if you need to handle missing names differently
    return sizes.containsKey(name) ? sizes.get(name) : 0;
}  
由于type是一个自定义成员变量,因此它们没有内置函数。获取类型实例的唯一内置函数是valueOf for name,即您需要传递一个etc


然后,只需调用:Types.getForTypea.micro.getSize

只需在Types类下创建一个全局hashmap,该类存储类型字符串与其对应的枚举实例之间的关系

private static final Map<String, Types> typeMap = new HashMap<String, Types>();
static {
    for (Types types : values()) {
        typeMap.put(types.type, types);
    }
}

public static Types searchByType(String type) {
    return typeMap.get(type);
}

枚举中存在允许遍历枚举中存在的值的值方法
private static final Map<String, Types> typeMap = new HashMap<String, Types>();
static {
    for (Types types : values()) {
        typeMap.put(types.type, types);
    }
}

public static Types searchByType(String type) {
    return typeMap.get(type);
}