我有一个枚举,其中包含映射到名称和整数的字符串集合。我想基于枚举内的String返回整数。
我也将enum用于其他目的,所以我想保留它(否则我只会使用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();
答案 0 :(得分:4)
只需在Types
类下创建一个全局哈希映射,它存储类型字符串与其对应的枚举实例之间的关系。
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);
}
答案 1 :(得分:2)
您可以使用以下内容:
public static int sizeFor(String name) {
for(Types type : Types.values()) {
if(type.getType().equals(name)) {
return type.getSize();
}
}
// handle invalid name
return 0;
}
其他选项是在构造函数内部private static Map<String, Integer> sizes = new HashMap<>();
和Types
映射中添加put
。然后sizeFor(String)
只会进行简单的查找。
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
是自定义成员变量,因此没有内置函数。获取Types
个实例的唯一内置函数是名称valueOf
(即您需要传递"A"
等。)
答案 2 :(得分:1)
public enum Type {
A("a.micro", 1), B("b.small", 2), C("c.medium", 4);
private static final Map<String, Type> map = createMap();
private static Map<String, Type> createMap() {
Map<String, Type> result = new HashMap<>();
for (Type type : values()) {
result.put(type.type, type);
}
return null;
}
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;
}
public static Type getForType(String type) {
return map.get(type);
}
}
然后,只需致电:Types.getForType("a.micro").getSize();