在if语句中格式化多个'或'条件的最佳方法(Java)

Ant*_*ony 43 java syntax if-statement

一个简单的问题,但谷歌没有多少帮助.

我有一个带有许多条件的if语句(必须检查10或15个常量,看它们是否存在.)

而不是写如下:

if (x == 12 || x == 16 || x == 19 || ...)
Run Code Online (Sandbox Code Playgroud)

有什么方法可以格式化它

if x is [12, 16, 19]?
Run Code Online (Sandbox Code Playgroud)

只是想知道是否有更简单的方法来编码,任何帮助赞赏.

编辑:答案非常有用,但我被要求添加更多细节,所以我会这样做以满足他们的好奇心.我正在制作一个日期验证课程,需要确保在仅有30天的时间里天数不超过30天(其中有4天,我认为)并且我正在写一个if语句来检查这样的事情:

if (day > 30 && (month == 4 || month == 6 || month == 9 || month == 11))
Run Code Online (Sandbox Code Playgroud)

我只是想知道是否有更快的方法来编写类似的东西 - 下面的许多答案都有帮助:).

Boh*_*ian 49

我经常使用这种模式.它非常紧凑:

// Define a constant in your class. Use a HashSet for performance
private static final Set<Integer> values = new HashSet<Integer>(Arrays.asList(12, 16, 19));

// In your method:
if (values.contains(x)) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

HashSet这里使用A 来提供良好的查找性能 - 即使非常大的哈希集也能够contains()非常快速地执行.

如果性能不重要,您可以将其要点编码为一行:

if (Arrays.asList(12, 16, 19).contains(x))
Run Code Online (Sandbox Code Playgroud)

但要知道ArrayList每次执行它都会创建一个新的.

  • if(Arrays.asList(12,16,19).contains(x)) (2认同)
  • 为此,我宁愿使用“Set”而不是“List”,但这实际上不会对那几个元素产生任何影响。 (2认同)

Mar*_*ace 10

你想切换到这个??

switch(x) {
    case 12:
    case 16:
    case 19: 
        //Do something
        break;
    default:
        //Do nothing or something else..
        break;
}
Run Code Online (Sandbox Code Playgroud)