最小化方法中的if条件

Pat*_*tan 0 java if-statement java-ee

我有以下课程.

public enum EnumService
{
    ONE, TWO, THREE, FOUR,.............HUNDRED;
    //Values till HUNDRED

    public static EnumService returnMockService(String request)
    {
        //some string match
        if(request.matches("/abc*")){
           return ONE;
        } 
        //some other string is match      
        else if(request.matches("/bcd*"))
            return TWO;
        else if(request.matches("/decf*"))
            return THREE;
        //many else if conditions
        else if(request.matches("/wxyz*"))
            return HUNDRED;
        return null;     

    }


}
Run Code Online (Sandbox Code Playgroud)

代码不是更多if else语句的标准.

我想在上面的方法中最小化if调用次数,同时将返回类型保持为EnumService

任何更好的选择来做到这一点.

如果有人可以帮助我使它干净,那将是很棒的.

fge*_*fge 5

第一:else如果你没有必要return.

第二:如果你在枚举中使用这个字符串作为参数,你可以优化它很多:

public enum EnumService
{
    ONE("abc*"),
    // etc

    private static final Map<Pattern, EnumService> MAPPING
        = new HashMap<>();

    static {
        for (final EnumService svc: values())
            MAPPING.put(svc.pattern, svc);
    }

    private final Pattern pattern;

    EnumService(final String s)
    {
        pattern = Pattern.compile(s);
    }

    public static EnumService returnMockService(String request)
    {
        for (final Map.Entry<Pattern, EnumService> entry: MAPPING.entrySet())
            if (entry.getKey().matcher(request).matches())
                return entry.getValue();
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)