[英]is there a way to get values of a map of pair and value by the key pair only?
[英]Easiest way to get Enum in to Key Value pair
我已经这样定义了我的枚举。
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;
}
}
从枚举值中获取键值对的最简单方法应该是什么?
我要创建的output map应该是这样的
key = Enum(example:- HOST)
value = Host
我要定义的 map 是
Map<String, String> constansts = new HashMap<String, String>();
答:我做了什么
我创建了一个通用方法来访问任何枚举并将值从该值更改为 Map。我得到了这个想法,形成了在任何其他线程中找到的代码片段。
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;
}
现在,在这之后我要做的就是用所有枚举结构调用这个方法,我就完成了。
还有一件事
为了完成这项工作,我必须像这样 orverride toString 方法
public String toString() {
return name;
}
谢谢。
假设您需要从文本值映射到枚举实例:
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);
}
您可以在枚举上使用 values() 方法,为您提供所有可能的组合,并使用迭代器将其放入映射中。
Map<String, UserType> map = new HashMap<String, UserType>();
for (UserType userType : UserType.values()) {
map.put(userType.name(), userType);
}
Java 8 方式:
Arrays.stream(UserType.values())
.collect(Collectors.toMap(UserType::getName, Function.identity()))
可以理解地将它存储在一个变量中:)
我认为在地图中使用 Enum 作为键的最简单方法是使用 EnumMap http://download.oracle.com/javase/1,5.0/docs/api/java/util/EnumMap.html
您可以使用 EnumMap,它是一个 Map 实现,专门将 Enum 作为其键。
EnumMap<UserType, String> activityMap = new EnumMap<>(UserType.class);
但是, EnumMap 需要构造函数中的键类型。
使用 Java 8 stream api 并立即分配给所需的结构:
HashMap<String, UserType> collect = Arrays.stream(UserType.values())
.collect(Collectors.toMap(
UserType::getName,
Function.identity(),
(prev, next) -> next, HashMap::new)
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.