5

假设我想将一堆变量与一个静态变量进行比较,通常我会这样做:

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*/}

我想认为有一种方法可以做到这一点。

4

4 回答 4

10

代替:

if(w == x || w == y || w == z)

你可以做:

if(Arrays.asList(x, y, z).contains(w))
于 2013-07-01T23:17:00.987 回答
3

尽管接受了答案,但我也想分享我的方法:

方法 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)) 
于 2013-07-02T02:23:11.047 回答
0

您可能更喜欢这样格式化:

if(w == x ||
   w == y ||
   w == z)

我发现它有助于打破条件并使其更易于阅读。

于 2013-07-02T01:31:28.173 回答
0

这在 Java 中是不允许的。但是您可以查看一些基于规则的引擎,例如drools

于 2013-07-02T02:26:53.143 回答