[英]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.