如何检查布尔列表中是否存在至少一个为true的值并避免NPE?
报错原因
你用到的Guava Booleans.contains 方法入参是基本类型boolean[],传入包装类Boolean数组时,自动拆箱过程中遇到null值就会直接抛出NPE。
可选实现方案
方案1:Java 8+ Stream 实现(无第三方依赖,最简洁)
直接用Stream.anyMatch结合Boolean.TRUE.equals判等,自动规避null值的NPE问题:
return Stream.of(a, b, c, d).anyMatch(Boolean.TRUE::equals);
原理说明:Boolean.TRUE.equals(xx)在入参为null或者false时都会返回false,无需额外做空判断。
方案2:Guava 适配写法(保留Guava依赖)
不用转基本类型数组,改用Iterables.any判断即可:
return Iterables.any(Arrays.asList(a, b, c, d), Boolean.TRUE::equals);
方案3:低版本Java无依赖实现
如果用的Java版本低于8,也不想引入第三方依赖,可以自己封装工具方法:
private static boolean hasTrueValue(Boolean... values) { for (Boolean val : values) { if (Boolean.TRUE.equals(val)) { return true; } } return false; }
调用方式:
return hasTrueValue(a, b, c, d);
内容的提问来源于stack exchange,提问作者DerBenniAusA
相关产品推荐
相关产品推荐

