Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java获取给定枚举值的枚举名称_Java_Enums_Enumeration - Fatal编程技术网

Java获取给定枚举值的枚举名称

Java获取给定枚举值的枚举名称,java,enums,enumeration,Java,Enums,Enumeration,给定Java枚举类型的值,如何获取该类型的名称 我有以下代码适用于特定的枚举类型,我可以让它更通用 public enum Category { APPLE("3"), ORANGE("1"), private final String identifier; private Category(String identifier) { this.identifier = identifier; } public Stri

给定Java枚举类型的值,如何获取该类型的名称

我有以下代码适用于特定的枚举类型,我可以让它更通用

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

您应该通过调用该方法来替换
getEnumNameForValue

尝试下面的代码

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;
    }
}
现在您可以使用下面的代码按值检索枚举

SalaryHeadMasterEnum.getEnumByString("Basic Pay")
使用下面的代码将枚举作为字符串获取

SalaryHeadMasterEnum.BASIC_PAY.name()
使用以下代码获取枚举的字符串值

SalaryHeadMasterEnum.BASIC_PAY.toString()

请尝试使用以下代码

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

下面是代码,它将从枚举值返回枚举名称

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

在这种情况下,您可以将enum的值转换为一个列表并通过它进行流式处理。 类似下面的例子。我建议使用过滤器()

使用ForEach

List<Category> category = Arrays.asList(Category.values());
category.stream().forEach(eachCategory -> {
            if(eachCategory.toString().equals("3")){
                String name = eachCategory.name();
            }
        });
List category=Arrays.asList(category.values());
category.stream().forEach(每个类别->{
if(eachCategory.toString().equals(“3”)){
String name=eachCategory.name();
}
});
或,使用过滤器

List<Category> category = Arrays.asList(Category.values());
category.stream().forEach(eachCategory -> {
            if(eachCategory.toString().equals("3")){
                String name = eachCategory.name();
            }
        });
当您要使用代码查找时:

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());
List 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());
当您要查找名称为的时:

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());
List categoryList=Arrays.asList(Category.values());
Category Category=categoryList.stream().filter(eachCategory->eachCategory.name().equals(“苹果”).findAny().orElse(null);
System.out.println(category.toString()+“”+category.name());

希望有帮助!我知道这是一篇非常古老的帖子,但有人可以获得帮助。

您想使用枚举名称()以外的其他内容来查找它们,有什么特殊原因吗?这会让很多人感到困惑,而且你也不能使用简单的
类别。valueOf(name)
。我们真的能让它更通用吗?我使用了大量的<代码>名称(string name)<代码>,现在我将为每个写一个<代码> *EnUn.Values().String().Futter(…).FiffyIe()(GET)(< /代码>,这太烦人了.@ Jukia:同时,考虑重写<代码> toString()/<代码>:@ TrasoGue:她正在重写.toString@Thilo:我的错误;谢谢@朱莉娅:很抱歉拼错了你的名字。@trashgood:朱莉娅想传递值。如何在name()函数中将值作为参数传递?@kayeshparvez:我已经使用了
映射
值()
,如前所述。这应该可以很好地工作,但是为什么要调用函数
toString()
,而不是
getName()
(或类似的东西)?
code==e.name
不会按照您的意思工作,应该是
e.name.equals(code)
insteadWell,是:
SalaryHeadMasterEnum.getEnumByString(“基本工资”)
可以工作,但依赖于JVM合并字符串文本。像
SalaryHeadMasterEnum.getEnumByString(新的StringBuilder(“基本”).append(“支付”).toString())这样的东西不需要,但应该是IMHO。使用
String.equals()
可以使这两种方法都起作用;-)-对于比较字符串与==这是错误的,并且对于使用与'name()'方法含义不同的变量'name',可以抛出“NullPointerException”;如果“When you want find with name:”流,则“orElse()”可以返回null。