Efficiently converting java string to its equivalent enum

元气小坏坏 提交于 2019-12-02 09:48:18

Is Enum.valueOf() not sufficient? How would you imagine being more efficient than that? There's (usually) no need to have an enum STRING_ONE("ONE") - just call enum value ONE and you get .valueOf() lookup for free.

Otherwise, just create a private static Map<String, YourEnum> and provide a similar valueOf() method that looks up against the Map.

Since Enum.valueOf operates on the built-in name of the enum (i.e. "STRING_ONE" and "STRING_TWO") you would need to roll your own "registry" of name-to-enum, like this:

public enum Strings {
    STRING_ONE("ONE"),
    STRING_TWO("TWO")
    ;
    private static final Map<String,Strings> byName = new HashMap<String,Strings>();
    private final String text;

    private Strings(final String text) {
        this.text = text;
    }
    static {
        for (Strings s : Strings.values()) {
            byName.put(s.toString(), s);
        }
    }
    @Override
    public String toString() {
        return text;
    }
    public static Strings forName(String name) {
        return byName.get(name);
    }
}

Demo.

Above, a map from string name to enum Strings is used to do the translation. If the name is not there, null would be returned from the Strings.forName method.

I think you need to change the code to be :

public enum Strings {
        STRING_ONE("ONE"), STRING_TWO("TWO");

        private String text;

        /**
         * @param text
         */
        private Strings(final String text) {
            this.text = text;
        }

        public String getText() {
            return this.text;
        }

        public static Strings getByTextValue(String text) {
            for (Strings str : Strings.values()) {
                if (str.getText().equals(text)) {
                    return str;
                }
            }
            return null;
        }

        /*
         * (non-Javadoc)
         * 
         * @see java.lang.Enum#toString()
         */
        @Override
        public String toString() {
            return text;
        }
    }

Example :

String test = "ONE";
Strings testEnum = Strings.getByTextValue(test);

now you have testEnum which is enum reference

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!