将Enum输入Key Value对的最简单方法

vij*_*had 12 java enums

我已经定义了这样的枚举.

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;
    }

}
Run Code Online (Sandbox Code Playgroud)

从枚举值中获取键值对的最简单方法是什么?

我想要创建的输出映射应该是这样的

key   = Enum(example:- HOST)
value = Host
Run Code Online (Sandbox Code Playgroud)

我想要定义的地图是

Map<String, String> constansts = new HashMap<String, String>();
Run Code Online (Sandbox Code Playgroud)

答:我做了什么

我创建了一个通用方法来访问任何枚举并将值从那里更改为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;
}
Run Code Online (Sandbox Code Playgroud)

现在,在此之后,我所要做的就是使用所有枚举构造调用此方法,我就完成了.

还有一件事

要完成此操作,我必须像这样对orString方法进行排序

    public String toString() {
        return name;
    }
Run Code Online (Sandbox Code Playgroud)

谢谢.

Pét*_*rök 22

如果您需要从文本值映射到枚举实例:

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);
Run Code Online (Sandbox Code Playgroud)

或更通用的方法:

for (UserType userType : UserType.values()) {
    map.put(userType.getName(), userType);
}
Run Code Online (Sandbox Code Playgroud)

  • 澄清一下:Vijay的第一个评论是关于我的答案的早期版本,它还没有包含循环的第二个解决方案.我相信后一版本满足他的要求. (4认同)
  • 这确实是非常艰难的方式.不存在任何开箱即用的东西吗?一定有什么东西........ (3认同)

ext*_*eon 13

您可以在枚举上使用values()方法,为您提供所有可能的组合,并使用迭代器将其放入地图中.

Map<String, UserType> map = new HashMap<String, UserType>();
for (UserType userType : UserType.values()) {
    map.put(userType.name(), userType);
}
Run Code Online (Sandbox Code Playgroud)


Rin*_*nor 7

Java 8方式:

Arrays.stream(UserType.values())
      .collect(Collectors.toMap(UserType::getName, Function.identity()))
Run Code Online (Sandbox Code Playgroud)

可以理解地将其存储在变量中:)