假设我想将一堆变量与一个静态变量进行比较,通常我会这样做:
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*/}
我想有一种方法可以这样做。
答案 0 :(得分:9)
而不是:
if(w == x || w == y || w == z)
你可以这样做:
if(Arrays.asList(x, y, z).contains(w))
答案 1 :(得分:3)
虽然接受了答案,但我也想分享我的方式:
方法1与接受的答案类似。但是,我使用Set而不是使用List。在这种情况下,如果有大量值要检查,它可能比单独执行==
更快:
// 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))
答案 2 :(得分:0)
您可能更喜欢将其格式化为:
if(w == x ||
w == y ||
w == z)
我发现它有助于打破条件并使其更易于阅读。
答案 3 :(得分:0)
Java中不允许这样做。但您可以查看一些基于规则的引擎,例如drools。