Конвертировать из String в перечисление Java с большим количеством значений [duplicate]
На этот вопрос уже есть ответ здесь:
Как получить значение перечисления из строкового значения в Java? 24 ответаДопустим, у меня есть перечисление со 100 значениями. Для простоты возьмем следующий пример:
public enum code
{
CODE_1("string1"),
CODE_2("string2"),
CODE_3("string3"),
CODE_4("string4"),
...
}
Я хочу создать открытый метод для преобразования строк с известным форматом (например, «string1», «string2» ...) в соответствующее значение перечисления CODE_1, CODE_2 ... Обычно это делается путем перебора всех значений, и если совпадение найдено, вернуть это значение перечисления. (Подробности можно найтив этом вопросе.)
Тем не менее, я обеспокоен тем, как регулярно перебирать все значения. Может ли это быть огромным узким местом? Что, если вместо 100 элементов было 1000?
В качестве упражнения для себя я попытался оптимизировать этот поиск с помощью статической карты, которая может обеспечить O (1) время поиска для любой строки. Мне нравится этот дополнительный трюк, но я хочу включить его в свой код, только если это действительно необходимо. Что вы думаете об использовании метода итерации и метода карты?
public enum Code
{
...
//enum values
...
//The string-to-Code map
private static final Map<String,Code> CODE_MAP = populateMap();
private static Map<String,Code> populateMap()
{
Map<String,Code> map = new HashMap<String,Code>();
for(Code c : Code.values())
{
map.put(c.getCode(), c);
}
return map;
}
private String code;
private Code(String code)
{
this.code = code;
}
public String getCode()
{
return this.code;
}
public Code convertFromString(String code)
{
//assume that the given string is actually a key value in the map
return (Code) CODE_MAP.get(code);
}
}