[英]Java getting the Enum name given the Enum Value
How can I get the name of a Java Enum type given its value?在给定值的情况下,如何获取 Java 枚举类型的名称?
I have the following code which works for a particular Enum type, can I make it more generic ?我有以下适用于特定枚举类型的代码,我可以让它更通用吗?
public enum Category {
APPLE("3"),
ORANGE("1"),
private final String identifier;
private Category(String identifier) {
this.identifier = identifier;
}
public String toString() {
return identifier;
}
public static String getEnumNameForValue(Object value){
Category[] values = Category.values();
String enumValue = null;
for(Category eachValue : values) {
enumValue = eachValue.toString();
if (enumValue.equalsIgnoreCase(value)) {
return eachValue.name();
}
}
return enumValue;
}
}
您应该通过调用name()
方法来替换getEnumNameForValue
。
Try below code试试下面的代码
public enum SalaryHeadMasterEnum {
BASIC_PAY("basic pay"),
MEDICAL_ALLOWANCE("Medical Allowance");
private String name;
private SalaryHeadMasterEnum(String stringVal) {
name=stringVal;
}
public String toString(){
return name;
}
public static String getEnumByString(String code){
for(SalaryHeadMasterEnum e : SalaryHeadMasterEnum.values()){
if(e.name.equals(code)) return e.name();
}
return null;
}
}
Now you can use below code to retrieve the Enum by Value现在您可以使用以下代码按值检索枚举
SalaryHeadMasterEnum.getEnumByString("Basic Pay")
Use Below code to get ENUM as String使用下面的代码将 ENUM 作为字符串
SalaryHeadMasterEnum.BASIC_PAY.name()
Use below code to get string Value for enum使用下面的代码获取枚举的字符串值
SalaryHeadMasterEnum.BASIC_PAY.toString()
Try, the following code..试试,下面的代码..
@Override
public String toString() {
return this.name();
}
Here is the below code, it will return the Enum name from Enum value.这是下面的代码,它将从 Enum 值返回 Enum 名称。
public enum Test {
PLUS("Plus One"), MINUS("MinusTwo"), TIMES("MultiplyByFour"), DIVIDE(
"DivideByZero");
private String operationName;
private Test(final String operationName) {
setOperationName(operationName);
}
public String getOperationName() {
return operationName;
}
public void setOperationName(final String operationName) {
this.operationName = operationName;
}
public static Test getOperationName(final String operationName) {
for (Test oprname : Test.values()) {
if (operationName.equals(oprname.toString())) {
return oprname;
}
}
return null;
}
@Override
public String toString() {
return operationName;
}
}
public class Main {
public static void main(String[] args) {
Test test = Test.getOperationName("Plus One");
switch (test) {
case PLUS:
System.out.println("Plus.....");
break;
case MINUS:
System.out.println("Minus.....");
break;
default:
System.out.println("Nothing..");
break;
}
}
}
In such cases, you can convert the values of enum to a List and stream through it.在这种情况下,您可以将 enum 的值转换为 List 并通过它进行流式处理。 Something like below examples.类似于下面的例子。 I would recommend using filter() .我建议使用filter() 。
Using ForEach :使用 ForEach :
List<Category> category = Arrays.asList(Category.values());
category.stream().forEach(eachCategory -> {
if(eachCategory.toString().equals("3")){
String name = eachCategory.name();
}
});
Or, using Filter :或者,使用过滤器:
When you want to find with code:当你想用代码查找时:
List<Category> categoryList = Arrays.asList(Category.values());
Category category = categoryList.stream().filter(eachCategory -> eachCategory.toString().equals("3")).findAny().orElse(null);
System.out.println(category.toString() + " " + category.name());
When you want to find with name:当你想用名字查找时:
List<Category> categoryList = Arrays.asList(Category.values());
Category category = categoryList.stream().filter(eachCategory -> eachCategory.name().equals("Apple")).findAny().orElse(null);
System.out.println(category.toString() + " " + category.name());
Hope it helps!希望有帮助! I know this is a very old post, but someone can get help.我知道这是一个很老的帖子,但有人可以得到帮助。
I believe it's better to provide the required method in the enum itself.我相信最好在枚举本身中提供所需的方法。 This is how I fetch Enum Name for a given value.这就是我获取给定值的枚举名称的方式。 This works for CONSTANT("value") type of enums.这适用于 CONSTANT("value") 类型的枚举。
public enum WalletType {
UPI("upi-paymode"),
PAYTM("paytm-paymode"),
GPAY("google-pay");
private String walletType;
WalletType(String walletType) {
this.walletType = walletType;
}
public String getWalletType() {
return walletTypeValue;
}
public WalletType getByValue(String value) {
return Arrays.stream(WalletType.values()).filter(wallet -> wallet.getWalletType().equalsIgnoreCase(value)).findFirst().get();
}
}
eg WalletType.getByValue("google-pay").name()
this will give you - GPAY例如WalletType.getByValue("google-pay").name()
这会给你 - GPAY
enum MyEnum {
ENUM_A("A"),
ENUM_B("B");
private String name;
private static final Map<String,MyEnum> unmodifiableMap;
MyEnum (String name) {
this.name = name;
}
public String getName() {
return this.name;
}
static {
Map<String,MyEnum> map = new ConcurrentHashMap<String, MyEnum>();
for (MyEnum instance : MyEnum.values()) {
map.put(instance.getName().toLowerCase(),instance);
}
unmodifiableMap = Collections.unmodifiableMap(map);
}
public static MyEnum get (String name) {
return unmodifiableMap.get(name.toLowerCase());
}
}
Now you can use below code to retrieve the Enum by Value现在您可以使用下面的代码按值检索枚举
MyEnum.get("A"); MyEnum.get("A");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.