我有一个标志,我想传递给一个函数,该函数根据map中的值返回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块是相同的,除了它们的返回值是彼此相反的)。
我不是一个非常有经验的代码,我真的很感激一些指导!
答案 0 :(得分:2)
使用flag
值而不是常量。
if (userList == null)
return !flag;
else if(userList.size() == 0)
return flag;
XOR
将用于最后一个陈述(留给读者的练习:-p)
答案 1 :(得分:2)
我们可以将公共处理移动到它自己的方法,然后根据flag
变量进行分支,如下所示。
public boolean userExists(String user) {
return userList != null && (userList.size() == 0 || userList.contains(user));
}
...
if(flag) return userExists(user);
else return !userExists(user);
作为旁注,您可能会遇到逻辑错误。在return true
的情况下,我不确定您为什么要userList.size() == 0
。
答案 2 :(得分:2)
这是一种简化整段代码的方法,删除了外部if/else
语句:
if (userList == null)
return !flag;
else if (userList.isEmpty())
return flag;
return userList.contains(user) == flag;
答案 3 :(得分:1)
if (userList == null)
return !flag;
else if(userList.size() == 0)
return flag;
return flag ? userList.contains(user) : !userList.contains(user);·
答案 4 :(得分:0)
您可以通过使返回值成为flag的函数来轻松删除重复:
if (userList == null) {
return !flag;
} else if (userList.size() == 0) {
return flag;
}
return !flag ^ userList.contains(user);
答案 5 :(得分:0)
return userList != null && userList.contains(user) == flag;
可以做这个工作。