Java getting the Enum name given the Enum Value

JavaEnumsEnumeration

Java Problem Overview


How can I get the name of a Java Enum type given its value?

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

Java Solutions


Solution 1 - Java

You should replace your getEnumNameForValue by a call to the name() method.

Solution 2 - Java

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

SalaryHeadMasterEnum.BASIC_PAY.name()

Use below code to get string Value for enum

SalaryHeadMasterEnum.BASIC_PAY.toString()

Solution 3 - Java

Try, the following code..

    @Override
    public String toString() {
    return this.name();
    }

Solution 4 - Java

Here is the below code, it will return the Enum name from Enum value.

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

Solution 5 - Java

In such cases, you can convert the values of enum to a List and stream through it. Something like below examples. I would recommend using filter().

Using 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.

Solution 6 - Java

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.

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

e.g. WalletType.getByValue("google-pay").name() this will give you - GPAY

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJuliaView Question on Stackoverflow
Solution 1 - JavaRiduidelView Answer on Stackoverflow
Solution 2 - Javaprashant thakreView Answer on Stackoverflow
Solution 3 - JavaJavaciView Answer on Stackoverflow
Solution 4 - JavaDo ItView Answer on Stackoverflow
Solution 5 - JavaAnkitView Answer on Stackoverflow
Solution 6 - JavaAadil MinhazView Answer on Stackoverflow