一尘不染

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

java

一个简单的问题,但是Google并没有提供太多帮助。

我有一个带很多条件的if语句(必须检查10或15个常量以查看是否存在任何常量。)

而不是这样写:

if (x == 12 || x == 16 || x == 19 || ...)

有没有办法格式化它

if x is [12, 16, 19]?

只是想知道是否有更简单的方法来编写此代码,对您的帮助表示赞赏。

编辑
:答案非常有帮助,但是一些人要求我添加更多细节,所以我会这样做以缓解他们的好奇心。我正在创建一个日期验证类,该类需要确保在只有30天的月份中天数不超过30天(我认为其中有4天),并且我正在编写if语句来检查如下内容:

if (day > 30 && (month == 4 || month == 6 || month == 9 || month == 11))

我只是想知道是否有一种更快的方法来编码类似的东西-下面的许多答案对您有帮助:)。


阅读 615

收藏
2020-09-08

共1个答案

一尘不染

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

// 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)) {
    ...
}

HashSet此处使用A 可以提供良好的查找性能-甚至非常大的哈希集也能够contains()极快地执行。

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

if (Arrays.asList(12, 16, 19).contains(x))

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

2020-09-08