使用逻辑OR而不重复java中条件中的变量

时间:2016-02-29 01:40:04

标签: java boolean-logic

有没有办法在java中使用OR而不重复条件中的变量:

例如

if(x != 5 || x != 10 || x != 15)

改为使用像

这样的东西
if x not in [5,10,15]

4 个答案:

答案 0 :(得分:4)

您可以利用Java8流中的短路终端操作(有关详细信息,请参阅Stream Operations section in the Stream Package Description。)例如:

int x = 2;

// OR operator
boolean bool1 = Stream.of(5, 10, 15).anyMatch(i -> i == x);
System.out.println("Bool1: " +bool1);

// AND operator
boolean bool2 = Stream.of(5, 10, 15).allMatch(i -> i != x);
System.out.println("Bool2: " +bool2);

它产生以下输出:

Bool1: false
Bool2: true

答案 1 :(得分:1)

你的第二个例子就是将元素存储在数组中并检查是否存在,在这种情况下不需要OR。

如果您想要走这条路线,请将您的元素存储在List<Integer>并使用contains(Object o)

if(!myList.contains(x))

答案 2 :(得分:0)

如果你想排除5的所有乘数,你可以尝试这个

if(x % 5 != 0)

答案 3 :(得分:0)

这里的解决方案的性能开销远低于使用Streams或HashMap的解决方案:

将要检查的值存储在数组中并编写一个小函数来检查x是否属于这些值

private static boolean isNotIn(int x, int[] values) {
    for (int i : values) {
        if (i == x) {
            return false;
        }
    }
    return true;
}



if (isNotIn(x, new int[] {5, 10, 15})) {
  ...
}

与原始代码相比,开销很小,如果可以将数组拉出为常量,则可忽略不计。 我也发现它比其他解决方案更好阅读,但这是一个非常主观的意见; - )