如何在java中检查多布尔值true或false>

如何在java中检查多布尔值true或false>,java,Java,我有8个布尔值。我想在8个布尔值中有一个或多个为false时回滚 boolean flag = false; boolean flag1 = false; boolean flag2 = false; boolean flag3 = false; etc,,. flag = dbCall... 这里标志值改变 在这里我必须手动检查像 if(flag == false && flag1 == false &

我有8个布尔值。我想在8个布尔值中有一个或多个为false时回滚

boolean flag = false;
        boolean flag1 = false;
        boolean flag2 = false;
        boolean flag3 = false;
        etc,,.

flag = dbCall...
这里标志值改变

在这里我必须手动检查像

    if(flag == false && flag1 == false && ....){
      userTransaction = rollback;
    }else{
     userTransaction = commit;
    }

有没有简单的方法可以检查java中的多重布尔值。

您的代码最初有一个bug

if(flag = false && flag1 = false && ....){
  userTransaction = rollback;
}
=赋值与==比较不同

接下来,使用当前样式,您可以将代码缩减为

if(! flag || !flag1 ||  ....){
  userTransaction = rollback;
}
因为他们是布尔人,所以你不需要再次检查布尔人


我建议的最后一件事是,无论这些变量来自何处,都要维护一个列表并对它们进行迭代以检查所有变量,这样,即使有n个布尔值,与检查相关的代码仍然保持不变。

您的代码最初有一个bug

if(flag = false && flag1 = false && ....){
  userTransaction = rollback;
}
=赋值与==比较不同

接下来,使用当前样式,您可以将代码缩减为

if(! flag || !flag1 ||  ....){
  userTransaction = rollback;
}
因为他们是布尔人,所以你不需要再次检查布尔人


我建议的最后一件事是,无论这些变量来自何处,维护一个列表并迭代它们以检查所有变量,这样,即使有n个布尔值,与检查相关的代码仍然保持不变。

我认为这是处理此问题的最快方法

将您的标志写入列表或数组

像这样测试它

名单如下:

如果!myList.containsfalse//all true

As数组


如果!myArray.asList.containsfalse//all true

我认为这是最快的处理方法

将您的标志写入列表或数组

像这样测试它

名单如下:

如果!myList.containsfalse//all true

As数组

如果!myArray.asList.containsfalse//all true

您可以通过Apache对所有值执行和操作:

if (BooleanUtils.and(flag1, flag2, flag3, flag4)) {
    userTransaction = commit;
} else {
    userTransaction = rollback;
}
或者只是按照常规方式:

if (flag1 && flag2 && flag3 && flag4)) {
    userTransaction = commit;
} else {
    userTransaction = rollback;
}
您可以通过Apache对所有值执行和操作:

if (BooleanUtils.and(flag1, flag2, flag3, flag4)) {
    userTransaction = commit;
} else {
    userTransaction = rollback;
}
或者只是按照常规方式:

if (flag1 && flag2 && flag3 && flag4)) {
    userTransaction = commit;
} else {
    userTransaction = rollback;
}

下面呢

if(flag  && flag1  && ....){
     userTransaction = commit;
  } else {
      userTransaction = rollback;
  }

下面呢

if(flag  && flag1  && ....){
     userTransaction = commit;
  } else {
      userTransaction = rollback;
  }

如果不需要中间结果,则可以尝试以下方法:

boolean result = true;
boolean doRollback = true;
try {
  result = db.doSomething1() && result; // ? && true -> ?; 
  result = db.doSomething2() && result; // if result: false then ? && result -> false
  if (result) {userTransaction.commit(); doRollback = false;}
} finally {
  if (doRollback) userTransaction.rollback();
}

这将确保执行每个db操作。。。该结果包含最终结果。

如果不需要中间结果,则可以尝试以下方法:

boolean result = true;
boolean doRollback = true;
try {
  result = db.doSomething1() && result; // ? && true -> ?; 
  result = db.doSomething2() && result; // if result: false then ? && result -> false
  if (result) {userTransaction.commit(); doRollback = false;}
} finally {
  if (doRollback) userTransaction.rollback();
}


这将确保执行每个db操作。。。该结果包含最终结果。

在第二个示例中,您不是在检查,而是在赋值。简单和之间的否定作为思考这个问题的另一种方式,为什么有8个布尔值?您是否需要单独使用它们?然后返回第一个错误,为什么您要单独跟踪所有8个操作?如果您将调用链接起来,并且只有在没有任何错误时才继续进行可能会更好。在第二个示例中,您没有检查,而是分配。简单和之间的否定是思考这一问题的另一种方式,为什么你有8个布尔人?您是否需要单独使用它们?然后返回第一个错误,为什么您要单独跟踪所有8个操作?如果您将调用链接起来,并且只有在没有问题时才继续,可能会更好。我建议您直接使用列表,而不是维护数组并将其转换为列表:@sᴜʀᴇsʜᴀᴛᴛᴀ 泰修好了。作为sᴜʀᴇsʜᴀᴛᴛᴀ 说在一个列表中处理它更容易、更快我认为数组会更好。列表只能有装箱类型。数组可以有基元类型。List vs bool[],我认为这取决于数据结构。与其维护数组并将其转换为List,我建议直接获取列表:@sᴜʀᴇsʜᴀᴛᴛᴀ 泰修好了。作为sᴜʀᴇsʜᴀᴛᴛᴀ 说在一个列表中处理它更容易、更快我认为数组会更好。列表只能有装箱类型。数组可以有基元类型。列表vs布尔[]。我认为这取决于数据结构。最佳选项imho。简单易读。也可以是单行指令。最佳选项imho。简单易读。也可以是单行指令。我想在8个布尔值中的一个或多个为false时回滚。所以| |,而不是&,肯定是吗?@AndyTurner是的。那就是| |。错过了。谢谢。当8个布尔人中的一个或多个出现错误时,我想回滚。所以| |,而不是&,肯定是吗?@AndyTurner是的。那就是| |。错过了。谢谢你。