[英]Is it possible in java to simplify the following if-statement?
我想简化这个 if-Statement 并防止写三遍“.='*'”? 可能吗?
if (i != '*' && j != '*' && k != '*')
List<String> list = new LinkedList<>(Arrays.asList(i,j,k));
if(list.stream().noneMatch("*"::equals)){
}else{
}
String temp = i+j+k;
if(temp.contains("*")){
}
我想简化这个 if 语句并防止写三遍“.='*'”。
这是一个简化可读性和意图的解决方案。
首先,创建一个简单、明显且名称清晰的方法(奖励:这很容易编写单元测试):
private static boolean isValid(char i) {
return i != '*';
}
然后在您的调用代码中,执行以下操作:
if (isValid(i) && isValid(j) && isValid(k)) {
// do things if all are valid
}
您可以通过创建一个检查isValid()
字符数组的方法来进一步提高可读性:
private static boolean allAreValid(char[] chars) {
for (char ch : chars) {
if (!isValid(ch)) {
return false;
}
}
return true;
}
然后你的调用代码变得非常清晰,不仅是步骤,而且意图 - 仅当字符都有效时才继续执行if
语句的主体。
char[] chars = {i, j, k};
if (allAreValid(chars)) {
// do things if all are valid
}
编写一个辅助方法。
private static boolean notStar(char ch) {
return ch != '*';
}
然后
if (notStar(i) && notStar(j) && notStar(k))
或者,如果使用 Java 8+,
if (IntStream.of(i, j, k).noneMatch(x -> x == '*'))
是的,可以省略写!='*'
三次,但该方法仍然会更长。 我建议使用您在问题中编写的方法,但如果您真的想尝试其他方法(可能出于好奇),您可以这样做:
char ch[] = {i,j,k}; /*I hope the variables i,j,k in question are char type*/
boolean flag = false;
for(int t = 0; t < ch.length; t++){
if(ch[t] != '*')
flag = true;
else{
flag = false;
break;
}
}
if(flag){
//Tasks to do...
}
写这么多是一项乏味的工作。 因此, if (i != '*' && j != '*' && k != '*')
是最优化的。 所以我会推荐使用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.