簡體   English   中英

有效地將Java字符串轉換為其等效的枚舉

[英]Efficiently converting java string to its equivalent enum

給定一個字符串,我想在恆定時間內獲得等效的枚舉。 我有一個像問題中顯示的那樣定義的枚舉。 創建字符串枚舉的最佳方法?

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

private final String text;

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

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

如果我現在得到一個字符串(例如“ TWO”),是否有辦法查看它是否存在,如果存在,那么有一種方法可以定義一個將返回枚舉值的方法(例如,如果我傳遞“ TWO” ”,我應該找回“ Strings.STRING_TWO”?

Enum.valueOf()是否不夠? 您如何想象比這更有效? (通常)不需要枚舉STRING_ONE("ONE") -只需調用枚舉值ONE.valueOf()免費獲得.valueOf()查找。

否則,只需創建一個private static Map<String, YourEnum>並提供一個類似Map valueOf()方法。

由於Enum.valueOf使用enum的內置名稱(即"STRING_ONE""STRING_TWO" ),因此您需要滾動自己的“枚舉名稱”的“注冊表”,如下所示:

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

演示。

上面,使用了從字符串名稱到enum Strings的映射來進行翻譯。 如果名稱不存在,則Strings.forName方法將返回null

我認為您需要將代碼更改為:

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

范例:

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

現在你有testEnum這是enum引用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM