Самый простой способ получить Enum в паре Key Value - PullRequest
11 голосов
/ 08 марта 2010

Я определил свои перечисления следующим образом.

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

}

Какой самый простой способ получить пару ключ-значение из значений перечисления?

Карта вывода, которую я хочуcreate должен выглядеть следующим образом

key   = Enum(example:- HOST)
value = Host

Определить карту, которую я хочу определить, это:

Map<String, String> constansts = new HashMap<String, String>();

Ответ: Что я сделал

Я создал универсальный метод для доступа к любомуПеречислите и измените значения с этого на карту.Я получил эту ИДЕЮ, сформировал фрагмент кода, найденный здесь, в любом другом потоке.

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

Теперь, после этого все, что мне нужно сделать, это вызвать этот метод со всеми конструкциями enum, и я Готово.

Еще одна вещь

Чтобы это сделать, я должен переопределить метод toString следующим образом

    public String toString() {
        return name;
    }

Спасибо.

Ответы [ 4 ]

21 голосов
/ 08 марта 2010

При условии, что вам нужно сопоставить текстовые значения с экземплярами перечисления:

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);
}
11 голосов
/ 08 марта 2010

Вы можете использовать метод values ​​() в перечислении, предоставляя вам все возможные комбинации, и поместить его в карту с помощью итератора.

Map<String, UserType> map = new HashMap<String, UserType>();
for (UserType userType : UserType.values()) {
    map.put(userType.name(), userType);
}
4 голосов
/ 14 февраля 2019

Java 8 way:

Arrays.stream(UserType.values())
      .collect(Collectors.toMap(UserType::getName, Function.identity()))

Понятно сохранить его в переменной:)

2 голосов
/ 23 августа 2011

Я думаю, что самый простой способ использования Enum в качестве ключа на карте - это использование EnumMap http://download.oracle.com/javase/1,5.0/docs/api/java/util/EnumMap.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...