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

时间:2019-06-10 21:23:33

标签: java

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

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

寻找更好的方法来编写带有多个if语句的OR或如何避免

6 个答案:

答案 0 :(得分:7)

非常简单,您可以构建具有不同值的Set来测试小写(如果需要,可以使用toLowerCase())。

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

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

感兴趣的还在于您在代码中添加了一些语义。您的集合将具有一个名称,该名称在功能上适合您的情况(allowedUserTypeselementTypesToProcess或其他名称),并且可以设置在有用的位置以供重用(如果相关)。

答案 1 :(得分:3)

一种避免使用if语句链或许多||运算符的方法  可能是switch

要使用switch来达到相同的结果,应类似于:

switch(type){
  case anotherString1:
  case anotherString2:
  case anotherString3:
    return true;
}

请注意,这些案例中的每一个都是相互影响的,这意味着如果遇到任何此类案例,我们将return true

请记住,这假设情况已被忽略。

此处有关switch的更多信息:https://www.geeksforgeeks.org/string-in-switch-case-in-java/

答案 2 :(得分:1)

假设设法将所有otherString1otherString2otherString3放在名为List<String> otherStrings的列表中,那么您可以利用contains()方法。但这并不能解决您的所有问题,因为您想忽略这种情况。

因此,让我们将流用作this other SO answer suggests

List<String> otherStrings = ...;

boolean containsType = otherStrings.stream()
    .anyMatch(otherString-> otherString.equalsIgnoreCase(type));

这样做的好处是,您可以在otherString中包含任意数量的List,而无需更改实现。

答案 3 :(得分:0)

如果您的所有条件都尝试匹配给定的字符串,则可以列出字符串并使用contains (https://docs.oracle.com/javase/8/docs/api/java/util/List.html#contains-java.lang.Object-)

List<String> list = Arrays.asList("type1", "type2",......);

if (type != null) {
    if (list.contains(type.toLowerCase())) {
        return true;
    }
}

答案 4 :(得分:0)

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

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

它甚至可以省略if语句。

答案 5 :(得分:0)

由于不涉及任何状态,建议您按照以下方法创建一个静态方法。

   public static boolean anyEqual(String arg, String... strs) {
      return Arrays.stream(strs).map(String::toLowerCase).collect(
            Collectors.toSet()).contains(arg.toLowerCase());
   }

然后您可以按以下两种方式调用该方法:

      String[] strs = { "string1", "string2", "string3"
      };

      System.out.println(anyEqual("string2", strs));
      System.out.println(anyEqual("test", "test1", "test2", "test3"));