You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中判断值是否在列表内 替代多if条件判断的方案有哪些

Java 判断变量是否存在于指定列表的替代实现方案

方案1:List.contains() 实现(Java 7及更早版本兼容)

适合校验值数量少、调用频率低的场景,直接用Arrays.asList构建固定列表调用contains方法即可:

// 固定校验列表建议定义为静态常量,避免重复创建对象
private static final List<String> TARGET_VALUES = Arrays.asList("a", "b", "c", "d", "e");

// 调用前先判空,避免空指针异常,和原有写法的异常行为一致
if (x != null && TARGET_VALUES.contains(x)) {
    // 原有业务逻辑
}

注意:Arrays.asList 生成的是定长列表,不支持增删操作,刚好适配固定校验场景,如果需要可变列表可外层包裹new ArrayList<>(Arrays.asList(...))。

方案2:Set.contains() 实现(高性能场景首选)

如果校验值数量多、判断逻辑调用频率高,推荐用HashSet存储校验值,contains操作时间复杂度为O(1),性能远高于List的O(n):

private static final Set<String> TARGET_VALUES = new HashSet<>(Arrays.asList("a", "b", "c", "d", "e"));

if (x != null && TARGET_VALUES.contains(x)) {
    // 原有业务逻辑
}

方案3:Stream流式写法(Java 8+ 适用,无需提前定义常量)

如果是单次临时校验不想单独定义常量,可以用Stream的anyMatch方法实现:

if (x != null && Stream.of("a", "b", "c", "d", "e").anyMatch(x::equals)) {
    // 原有业务逻辑
}

方案4:集合工厂方法实现(Java 9+ 适用,写法更简洁)

Java 9之后原生支持List.of、Set.of静态工厂方法,创建不可变固定集合的语法更简洁:

private static final Set<String> TARGET_VALUES = Set.of("a", "b", "c", "d", "e");

if (x != null && TARGET_VALUES.contains(x)) {
    // 原有业务逻辑
}

补充说明

  • 如果业务允许x为null且需要把null纳入校验范围,去掉非空判断、把null加入校验集合即可。
  • 如果校验值数量在3个以内,原有逐个equals的写法性能更高,不需要额外创建集合对象,可根据实际场景选择。

内容的提问来源于stack exchange,提问作者Blue

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 01:24:03