我已经定义了这样的枚举。
public enum UserType {
RESELLER("Reseller"),
SERVICE_MANAGER("Manager"),
HOST("Host");
private String name;
private UserType(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
从枚举值中获取键值对的最简单方法是什么?
我想创建的输出地图应该是这样的
key = Enum(example:- HOST)
value = Host
我想要定义的地图是
Map<String, String> constansts = new HashMap<String, String>();
Ans:我做了什么
我创建了一个通用方法来访问任何枚举并将其中的值更改为Map。我得到了这个IDEA,形成了一个在任何其他线程中找到的代码片段。
public static <T extends Enum<T>> Map<String, String> getConstantMap(
Class<T> klass) {
Map<String, String> vals = new HashMap<String, String>(0);
try {
Method m = klass.getMethod("values", null);
Object obj = m.invoke(null, null);
for (Enum<T> enumval : (Enum<T>[]) obj) {
vals.put(enumval.name(), enumval.toString());
}
} catch (Exception ex) {
// shouldn't happen...
}
return vals;
}
现在,在此之后,我所要做的就是使用所有枚举结构调用此方法,我就完成了。
还有一件事
要完成此操作,我必须像这样
来修改toString方法 public String toString() {
return name;
}
感谢。
答案 0 :(得分:21)
如果您需要从文本值映射到枚举实例:
Map<String, UserType> map = new HashMap<String, UserType>();
map.put(RESELLER.getName(), RESELLER);
map.put(SERVICE_MANAGER.getName(), SERVICE_MANAGER);
map.put(HOST.getName(), HOST);
或更通用的方法:
for (UserType userType : UserType.values()) {
map.put(userType.getName(), userType);
}
答案 1 :(得分:11)
您可以在枚举上使用values()方法,为您提供所有可能的组合,并使用迭代器将其放入地图中。
Map<String, UserType> map = new HashMap<String, UserType>();
for (UserType userType : UserType.values()) {
map.put(userType.name(), userType);
}
答案 2 :(得分:2)
我认为在地图中使用Enum作为键的最简单方法是使用EnumMap http://download.oracle.com/javase/1,5.0/docs/api/java/util/EnumMap.html
答案 3 :(得分:2)
Java 8方式:
Arrays.stream(UserType.values())
.collect(Collectors.toMap(UserType::getName, Function.identity()))
难以理解地将其存储在变量中:)
答案 4 :(得分:0)
您可以使用 EnumMap,它是一个 Map 实现,专门将 Enum 作为其键。
EnumMap<UserType, String> activityMap = new EnumMap<>(UserType.class);
<块引用>
但是,EnumMap 需要构造函数中的键类型。