一旦满足条件,跳过if语句

时间:2015-08-26 23:08:27

标签: java loops

这个问题来自我的OCD-ish性质。说我有这段代码。

boolean executed = false;
for(Object o : Collection){
    if((o fulfills condition) && executed  == false){
        //do something
        executed  = true;
    } 
    //other code
}

如果规范只要求if语句执行一次,是否有更好的方法可以跳过检查 if条件而不是将executed设置为true?令我困扰的是,在if语句已经执行之后,循环需要检查if条件每个循环迭代。

执行布尔值的目的是防止if语句再次执行。我不确定这是否可行,但我想更进一步,并在executedtrue后跳过检查if条件。

编辑:我仍然需要在满足条件后完成循环。

5 个答案:

答案 0 :(得分:6)

不是真的;您每次使用此代码流时都会检查该条件。但是,有一些方法可以降低成本。

我建议不要使用false,因为它会导致你反复检查条件而然后会失败,这可能不是你想要的。

最简单的方法是重新排序布尔AND语句。

continue

由于Java的短路性质,您只会检查boolean executed = false; for(Object o : Collection){ if(!executed && (o fulfills condition)){ executed = true; } //other code } 及其第二次和未来的运行,它将评估为!executed,因此"跳过& #34;有条件的检查。

答案 1 :(得分:1)

我会采用不同的方式,如下所示:

int i = 0;
for ( ; i<collection.size() ; i++)
{
    Object o = collection.get(i);
    if (o fulfills condition)
    {
        // do what you gotta do and then
        break;
    }
    doSomethingElse(o); // define a private method for whatever is done here
}
for ( ; i<collection.size() ; i++)
{
    doSomethingElse(collection.get(i));
}

答案 2 :(得分:0)

假设您仍然需要&#34;其他代码&#34;继续运行,条件测试可能慢,翻转测试和布尔值:

print(sorted(votes.items(), key = lambda x: x[1]))

这消除了否定boolean doTest = true; for(Object o : Collection){ if (doTest && (o fulfills condition)) { doTest = false; } //other code } 运算符阻止在&&doTest后评估条件。

答案 3 :(得分:0)

不知道上下文,我建议的唯一改进是检查执行第一 -

boolean executed = false;
for(Object o : Collection){
    if(executed  == false && (o fulfills condition) ){
        //do something
        executed  = true;
    } 
    //other code
}

这将产生最少的副作用。否则,我不知道如何改进您的解决方案,因为您说&#34;其他代码&#34;仍然需要执行。希望这会有所帮助。

答案 4 :(得分:0)

为了遍历列表并在第一次满足条件时执行任务,而不是之后测试条件,您可以利用Java {{1}的短路特性运算符。请参阅以下代码:

and

执行任务后,boolean performed = false; for(Object o : Collection){ if(!performed && o fulfills condition){ //do something performed = true; } //other code } 标志将设置为true。当Java实现第一个操作数(performed之前的条件)求值为true时,它不会计算&&。这称为短路。当第二个操作数(o fulfills condition)是一个昂贵的计算时,如果没有必要,您希望避免执行此操作,这非常有用。