有没有办法在java中使用OR而不重复条件中的变量:
例如
if(x != 5 || x != 10 || x != 15)
改为使用像
这样的东西if x not in [5,10,15]
答案 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})) {
...
}
与原始代码相比,开销很小,如果可以将数组拉出为常量,则可忽略不计。 我也发现它比其他解决方案更好阅读,但这是一个非常主观的意见; - )