Java 在枚举内搜索
我有一个枚举,其中包含映射到名称和整数的字符串集合。我想根据枚举中的字符串返回整数 我还将枚举用于其他目的,因此我希望保留它,否则我将仅使用HashMap。有可能吗 这是一个例子,展示了我想要实现的目标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
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);
}