避免java if条件中出现多个OR语句的更好方法
有没有更好的方法避免if条件下出现多个OR语句? 我在OR语句中有超过8个字符串的if避免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(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));