应提取语义化布尔变量或封装为isXxx/canXxx方法,避免长布尔表达式;善用短路运算符与空安全写法;集合过滤优先使用Stream链式filter。

避免过长的布尔表达式,核心是把“判断逻辑”从条件语句中抽出来,让 if 里只留干净、易懂的状态标识。
提取语义化布尔变量
把复杂条件计算结果提前赋给一个命名清晰的 boolean 变量,而不是堆在 if 括号里:
- ✅ 推荐写法:用变量承载业务含义
boolean isEligibleForDiscount = user.isVip() && order.getTotal() > 100 && !order.isPromoApplied();
if (isEligibleForDiscount) { applyDiscount(); } - ❌ 避免写法:括号内塞满逻辑,难读、难复用、难调试
if (user.isVip() && order.getTotal() > 100 && !order.isPromoApplied()) { ... }
封装为 isXxx / canXxx 方法
当判断逻辑涉及多步、边界检查或复用场景时,封装成私有方法更合适:
- 方法名明确表达意图,比如 isPasswordStrong()、canSubmitOrder()
- 内部可处理 null、空值、异常分支,外部只关心返回 true/false
- 便于单元测试,也方便后续加日志或监控
- 示例:
private boolean canSubmitOrder(OrderVo vo) {
if (vo == null) return false;
return vo.isValid() && !vo.isSubmitted() && hasRequiredItems(vo.getItems());
}
善用短路运算符与空安全写法
利用 && 和 || 的短路特性,天然规避空指针,同时让逻辑顺序更可控:
立即学习“Java免费学习笔记(深入)”;
- 先写容易失败或开销小的条件,例如先判 null,再调方法:
if (user != null && user.isActive() && user.hasPermission("submit")) - 避免在条件中重复调用可能有副作用的方法(如数据库查询、远程调用)
- 不用 == true 或 == false,直接写 if (flag) 或 if (!flag)
用 Stream 替代嵌套条件过滤(集合场景)
当目标是对集合做多条件筛选时,别硬写 if 嵌套循环,改用 Stream 链式 filter:
- 每层 filter 职责单一,顺序即逻辑顺序,可读性强
- 支持动态增删条件,扩展性好
- 示例:
ListvalidOrders = orders.stream()
.filter(o -> o.getStatus() == OrderStatus.PENDING)
.filter(o -> o.getCreateTime().isAfter(Instant.now().minusSeconds(3600)))
.filter(o -> o.getItems().size() > 0)
.collect(Collectors.toList());


















