繁体   English   中英

将 Enum 放入键值对的最简单方法

[英]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 需要构造函数中的键类型。

参考: https : //www.baeldung.com/java-enum-map

使用 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM