【问题标题】:Improve condition check改善条件检查
【发布时间】:2017-12-08 02:52:45
【问题描述】:

在以下场景中需要最佳方法,

我有如下属性列表,如源、目的地、是/否:

Example: 
source ,  destination , Yes/No
abc, bcd, Yes
abd, gdc, Yes

在java中我可以使用类似的条件

if(Obj.getSource().equals("abc")) {
   if(Obj.getDest().equals("bcd")) { 
      return true;
   }
}

if(Obj.getSource().equals("abd")) {
   if(Obj.getDest().equals("gdc")) { 
      return true;
   }
}

通过这种方式,我可以处理上述情况,基于结果是,我可以处理我的业务逻辑。

但我的方法是两个多检查和,代码行冗长, 请建议我使用 java7 或 java8 的好方法。

【问题讨论】:

  • 你能使用像 logical and &&logical or || 这样的逻辑运算符吗?在这种情况下,您可以简单地使用相应的条件编写 if ((first && second) || (third && fourth)) { return true; }
  • 请注意,您应该遵守命名约定。变量名称以小写字符开头(假设 Obj 是一个变量)。在这种情况下,obj 将是一个更合适的名称。
  • 刚才提到了伪代码,所以我用了Obj,

标签: java java-8


【解决方案1】:

您可以使用逻辑运算符将所有四个条件合二为一。例如,使用 logical and &&logical or ||。它可能看起来像:

if ((first && second) || (third && fourth)) {
    return true;
}

或替换所有条件:

if ((Obj.getSource().equals("abc") && Obj.getDest().equals("bcd"))
        || (Obj.getSource().equals("abd") && Obj.getDest().equals("gdc"))) {
    return true;
}

请注意,您可以将Obj.getSource()Obj.getDest() 的结果存储在一个变量中,以便通过使用该变量来节省一些性能并使条件更具可读性。

如果您在其他情况下使用return false;,您甚至可以完全忽略整个if,因为您可以在评估条件后直接返回boolean(它评估为true 或@987654331 @,则无需返回truefalse 硬编码):

return (first && second) || (third && fourth);

【讨论】:

  • 它的好方法,但如果条件不超过5,声纳链接简单,不是好的做法,if ((Obj.getSource().equals("abc") && Obj.getDest() .equals("bcd")) || (Obj.getSource().equals("abd") && Obj.getDest().equals("gdc"))) { return true; },有没有使用java8并行流的方法
  • 我不知道该流应该是什么样子。我的意思是条件的结构总是相同的,它是两个,然后两个都加上。这确实是最简单的。如前所述,如果您的目标是摆脱内部的长条件,您可以先boolean result = (first && second) || third && fourth); 然后if (result) 或直接return result;
  • 即使我尝试过,也没有与此问题陈述匹配的流,我正在迭代 for 循环并维护每个列属性的数组并根据匹配比较每个索引,返回真的
  • 好吧,如果你在迭代一些东西,你总是把它转换成Stream。但是在这种情况下,我们需要整个代码,尤其是包含迭代的部分。但是,即使使用流,您显示的条件部分也可能保持不变。
猜你喜欢
  • 2021-10-12
  • 2019-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-20
  • 2022-01-04
  • 1970-01-01
  • 2011-09-07
相关资源
最近更新 更多