返回正确的枚举,而不使用if [英] Return correct enum without using if

查看:180
本文介绍了返回正确的枚举,而不使用if的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果有以下情况,我有任务要更改:

  if(userDecision.equalsIgnoreCase(D)){
return DirectoriesActivity.DELETE;
} else if(userDecision.equalsIgnoreCase(R)){
return DirectoriesActivity.REPLACE;
} else {
return DirectoriesActivity.ADD_NEW_CONTENTS;
}

对于什么会返回只是枚举而不使用if。我必须使用一些枚举属性,但我不知道哪一个:/这是我的枚举:

  public enum DirectoriesActivity { 
DELETE,
REPLACE,
ADD_NEW_CONTENTS;
}

我尝试这样做:

  public enum DirectoriesActivity {
DELETE(D),
REPLACE(R),
ADD_NEW_CONTENTS(A );

private String directoriesActivityCode;
private DirectoriesActivity(String directoriesActivityCode){
this.directoriesActivityCode = directoriesActivityCode;
}

public DirectoriesActivity getEnum(String x){
//不知道该怎么做
}
}
解决方案

这样做:

  public enum DirectoriesActivity {
DELETE(D),
REPLACE(R),
ADD_NEW_CONTENTS(A);

private String directoriesActivityCode;

private DirectoriesActivity(String directoriesActivityCode){
this.directoriesActivityCode = directoriesActivityCode;
}

public DirectoriesActivity getEnum(String x){
for(DirectoriesActivity directoriesActivity:values()){
if(directoriesActivity.directoriesActivityCode.equals(x)) {
return directoriesActivity;
}
}
抛出新的IllegalArgumentException(未知值+ x);
}
}

或者如果您使用Java 8

  return Arrays.stream(DirectoriesActivity.values())
.filter(directoriesActivity - > directoriesActivity.directoriesActivityCode.equals(userDecision ))
.findFirst()
.orElseThrow(() - > new IllegalArgumentException(Unknown value+ userDecision));

重要的备注这里是这个解决方案比彼得提供的解决方案。但是,只要性能不成问题,我宁愿采用这样的解决方案。


I have task to change this if:

if (userDecision.equalsIgnoreCase("D")) {
    return DirectoriesActivity.DELETE;
} else if (userDecision.equalsIgnoreCase("R")) {
    return DirectoriesActivity.REPLACE;
} else {
    return DirectoriesActivity.ADD_NEW_CONTENTS;
}

On something what will return just enum without using if. I have to use some enum properties but I don't know which one :/ Here is my enum:

public enum DirectoriesActivity {
    DELETE,
    REPLACE,
    ADD_NEW_CONTENTS;
}

I tried to do something like this:

public enum DirectoriesActivity {
    DELETE ("D"),
    REPLACE ("R"),
    ADD_NEW_CONTENTS ("A");

    private String directoriesActivityCode;
    private DirectoriesActivity(String directoriesActivityCode)    {
        this.directoriesActivityCode = directoriesActivityCode;
    }

    public DirectoriesActivity getEnum(String x){
        //no idea what to do here
    }
}

Or maybe somebody have some other idea?

解决方案

How about this:

public enum DirectoriesActivity {
    DELETE ("D"),
    REPLACE ("R"),
    ADD_NEW_CONTENTS ("A");

    private String directoriesActivityCode;

    private DirectoriesActivity(String directoriesActivityCode)    {
        this.directoriesActivityCode = directoriesActivityCode;
    }    

    public DirectoriesActivity getEnum(String x){
        for (DirectoriesActivity directoriesActivity : values()) {
            if (directoriesActivity.directoriesActivityCode.equals(x)) {
                return directoriesActivity;
            }
        }
        throw new IllegalArgumentException("Unknown value " + x);
    }
}    

Or in case you are using Java 8

return Arrays.stream(DirectoriesActivity.values())
            .filter(directoriesActivity -> directoriesActivity.directoriesActivityCode.equals(userDecision))
            .findFirst()
            .orElseThrow(() -> new IllegalArgumentException("Unknown value " + userDecision));

Important side note here is that this solution is performing a lot worse than the solution provided by Peter. But as long as performance is not an issue, I'd prefer a solution like this.

这篇关于返回正确的枚举,而不使用if的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆