假设我想将一堆变量与一个静态变量进行比较,通常我会这样做:
int w = 0;
int x = 1;
int y = 1;
int z = 2;
if(w == x || w == y || w == z){/*more code here*/}
但这可能会变得非常长并且似乎没有必要,是否有任何方法可以做更多类似的事情:
if(w == (x || y || z)){/*more code here*/}
我想认为有一种方法可以做到这一点。
假设我想将一堆变量与一个静态变量进行比较,通常我会这样做:
int w = 0;
int x = 1;
int y = 1;
int z = 2;
if(w == x || w == y || w == z){/*more code here*/}
但这可能会变得非常长并且似乎没有必要,是否有任何方法可以做更多类似的事情:
if(w == (x || y || z)){/*more code here*/}
我想认为有一种方法可以做到这一点。
代替:
if(w == x || w == y || w == z)
你可以做:
if(Arrays.asList(x, y, z).contains(w))
尽管接受了答案,但我也想分享我的方法:
方法 1 类似于接受的答案。但是,我没有使用 List,而是使用了 Set。==
在这种情况下,如果有很多值要检查,它可能比单独执行更快:
// make it a static final member if semantically possible
Set<Integer> ALL_VALUES = new HashSet<Integer>(Arrays.asList(a,b,c,d,e,f,g,h));
//.....
if (ALL_VALUES.contains(w)) {
//... do something
}
方法2是写一个小实用函数,比如
public static <T> boolean sameAsAny(T value, T... possibleValues) {
for (T p : possibleValues) {
if (value == p) {
return true;
}
}
return false;
}
使用这样的实用程序,您可以执行以下操作:
if (sameAsAny(w, x, y, z))
您可能更喜欢这样格式化:
if(w == x ||
w == y ||
w == z)
我发现它有助于打破条件并使其更易于阅读。
这在 Java 中是不允许的。但是您可以查看一些基于规则的引擎,例如drools。