Java中判断值是否在一组值中的标准写法
兼容Java 8的解决方案
基础实现(非null场景)
如果能确定待测试值a不会为null,可以直接用Stream的短路匹配实现:
if (Stream.of(b, c, d).anyMatch(a::equals)) { // 匹配成功后的逻辑 }
兼容null的安全实现
如果需要处理a或目标值b/c/d为null的情况,使用Objects.equals避免空指针异常:
import java.util.Objects; import java.util.stream.Stream; // ... if (Stream.of(b, c, d).anyMatch(x -> Objects.equals(a, x))) { // 匹配成功后的逻辑 }
备选方案(基于临时列表)
也可以通过临时列表实现,同样满足需求:
import java.util.Arrays; // ... if (Arrays.asList(b, c, d).contains(a)) { // 匹配成功后的逻辑 }
方案符合需求的说明
- 临时对象自动销毁:
Stream.of()或Arrays.asList()创建的都是临时实例,if条件评估完成后会被垃圾回收,不会长期驻留内存 - 执行成本低:
anyMatch是短路操作,找到第一个匹配项就停止遍历;contains内部也是短路查找,性能开销极小 - 待测试值仅执行一次:
a只在代码中出现一次,避免了重复执行高成本或有副作用的表达式
为什么排除常量集合方案
正如你提到的,常量集合会提前初始化且长期存在,不符合“条件评估后立即销毁”的要求,因此不适用本场景。
内容的提问来源于stack exchange,提问作者Gouvernathor
相关产品推荐
相关产品推荐

