繁体   English   中英

java 中是否可以简化以下 if 语句?

[英]Is it possible in java to simplify the following if-statement?

我想简化这个 if-Statement 并防止写三遍“.='*'”? 可能吗?

if (i != '*' && j != '*' && k != '*')
  1. 使用数组:将所有元素放入数组中,遍历数组并判断。
List<String> list = new LinkedList<>(Arrays.asList(i,j,k));
if(list.stream().noneMatch("*"::equals)){

}else{

}
  1. 使用字符串:将元素拼接成字符串
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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM