Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
避免java if条件中出现多个OR语句的更好方法_Java - Fatal编程技术网

避免java if条件中出现多个OR语句的更好方法

避免java if条件中出现多个OR语句的更好方法,java,Java,有没有更好的方法避免if条件下出现多个OR语句? 我在OR语句中有超过8个字符串的if if(type.equalsIgnoreCase(anotherString1) || type.equalsIgnoreCase(anotherString2) || type.equalsIgnoreCase(anotherString3)){ return true; } 寻找使用多个OR语句编写if的更好方法,或者如何避免使用一系列if语句或多个| |运算符 可能是一

有没有更好的方法避免if条件下出现多个OR语句? 我在OR语句中有超过8个字符串的if

if(type.equalsIgnoreCase(anotherString1) ||   
   type.equalsIgnoreCase(anotherString2) ||   
   type.equalsIgnoreCase(anotherString3)){
    return true;
}

寻找使用多个OR语句编写if的更好方法,或者如何避免使用一系列if语句或多个| |运算符 可能是一个开关

要使用开关实现相同的结果,如下所示:

switch(type){
  case anotherString1:
  case anotherString2:
  case anotherString3:
    return true;
}
请注意,这些案例中的每一个都是相互关联的,这意味着如果这些案例中的任何一个被命中,我们将返回true

请记住,这是假设案例已经被忽略


有关此处开关的更多信息:

若要将所有otherString1、otherString2和otherString3放在名为list otherStrings的列表中,则可以利用contains方法。但这并不能解决你所有的问题,因为你想忽略这个案例

因此,让我们使用流,如下所示:


这样做的好处是,您可以在列表中包含任意数量的其他字符串,而无需更改实现。

非常简单,您可以使用不同的值构建一个集合,以便在需要时使用toLowerCase以小写形式进行测试

然后,将您的声明更改为:

if (<set_name>.contains(type.toLowerCase())) 

有趣的是,您还可以为代码添加一些语义。您的集合将有一个名称,一个功能上适合您的case allowedUserTypes、ElementTypeStopProcess或任何东西的名称,并且可以设置在有用的地方以供重用(如果相关)。

如果您的所有条件都试图匹配给定的字符串,您可以有一个字符串列表并使用它


使用流,您可以执行以下操作:

return  Stream.of(anotherString1,anotherString2,anotherString3)
              .anyMatch(e->e.equalsIgnoreCase(type));

它允许您省略if语句。

由于不涉及任何状态,建议您创建一个静态方法,如下所示

公共静态布尔值anyEqualString参数,字符串。。。strs{ 返回数组.streamstrs.mapString::toLowerCase.collect 收集器.toSet.containersag.toLowerCase; } 然后,您可以以下任一方式调用该方法:

字符串[]strs={string1,string2,string3 }; System.out.PRINTLNAYEQUALSTRING2,strs; System.out.printlanyequaltest、test1、test2、test3;
什么更好?更具可读性?更快?其他一些标准?另请参见值得注意的是,当在switch语句中使用变量作为实例时,它们必须是不可变的。不要忘记,在构建集合时,它也应该用小写值填充=是的,我用不同的值编写了以小写形式测试的集合。我将用粗体^^^。请注意,省略if语句实际上会改变语义。在OP示例中,您不知道如果不满足条件会发生什么。可能会执行其他测试,并且方法结果可能仍然是正确的!
List<String> list = Arrays.asList("type1", "type2",......);

if (type != null) {
    if (list.contains(type.toLowerCase())) {
        return true;
    }
}
return  Stream.of(anotherString1,anotherString2,anotherString3)
              .anyMatch(e->e.equalsIgnoreCase(type));