有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

返回值的java反转

我有一个标志,我想传递给一个函数,该函数根据映射中的值返回true或false:

// userList is a List<String> and is stored as the value field in a map
// user is a String
if(flag)
{
    if (userList == null)
        return false;
    else if(userList.size() == 0)
        return true;

    return userList.contains(user);
}
else
{
    if (userList == null)
        return true;
    else if(userList.size() == 0)
        return false;

    return !userList.contains(user);
}

我的问题是:不管怎样,是否要整理这段代码,有很多复制(if和else块是相同的,只是它们的返回值彼此相反)

我不是一个非常有经验的代码,我真的很感激一些指导


共 (6) 个答案

  1. # 1 楼答案

    if (userList == null)
        return !flag;
    else if(userList.size() == 0)
        return flag;
    
    return flag ? userList.contains(user) : !userList.contains(user);·
    
  2. # 2 楼答案

    使用flag值代替常量

    if (userList == null)
        return !flag;
    else if(userList.size() == 0)
        return flag;
    

    AXOR将作为最后一句话(留给读者作为练习:-p)

  3. # 3 楼答案

    通过将返回值设置为flag的函数,可以轻松删除重复:

    if (userList == null) {
        return !flag;
    } else if (userList.size() == 0) {
        return flag;
    }
    
    return !flag ^ userList.contains(user);
    
  4. # 4 楼答案

    我们可以将公共处理移到它自己的方法,然后根据flag变量进行分支,如下所示

    public boolean userExists(String user) {
        return userList != null && (userList.size() == 0 || userList.contains(user));
    }
    

    if(flag) return userExists(user);
    else return !userExists(user);
    

    作为旁注,您可能有一个逻辑错误。我不知道你为什么要在userList.size() == 0的情况下return true

  5. # 5 楼答案

    return userList != null && userList.contains(user) == flag;
    

    也许能胜任

  6. # 6 楼答案

    下面是一种简化整个代码片段的方法,删除外部if/else语句:

    if (userList == null)
        return !flag;
    else if (userList.isEmpty())
        return flag;
    return userList.contains(user) == flag;