java中lambda表达式通过predicate封装校验规则,支持单字段验证、组合逻辑(and/or/negate)、批量规则执行、stream批量对象验证及工具类封装,显著提升数据验证的简洁性、可复用性与可维护性。

Java 中 Lambda 表达式能显著简化数据验证流程,核心在于把“验证逻辑”变成可传递、可复用、可组合的行为,而不是写一堆 if-else 或重复的校验方法。
用 Predicate 封装校验规则
验证本质是“判断输入是否满足条件”,这正好对应 Predicate
- 单字段校验:比如非空、长度、范围
Predicate
- 组合校验:and、or、negate 方法链式拼接,避免嵌套 if
统一入口 + 多规则批量验证
把多个 Predicate 放进集合,遍历执行并收集失败原因,比逐个 if 判断更易维护:
- 定义验证器列表
> rules = Arrays.asList(<br> s -> s != null,<br> s -> s.length() >= 3,<br> s -> s.chars().anyMatch(Character::isUpperCase)<br>);
- 批量执行并反馈结果
List
for (int i = 0; i if (!rules.get(i).test(input)) {
errors.add("Rule #" + (i+1) + " failed");
}
}
配合 Stream 实现批量对象验证
面对 List
- 找出所有邮箱格式错误的用户
Predicate
List
.filter(Predicate.not(validEmail))
.collect(Collectors.toList());
- 生成结构化错误信息(含字段名和原因)
.map(u -> {
if (u.getAge() 150) return u.getName() + ": age out of range";
if (u.getEmail() == null) return u.getName() + ": email missing";
return null;
})
.filter(Objects::nonNull)
.collect(Collectors.toList());
封装成可复用的验证工具类
把常用校验逻辑抽象为静态方法,配合 Lambda 参数,让业务代码专注“要验什么”,而非“怎么验”:
- 通用非空校验
return value != null;
}
// 调用时传入具体类型和逻辑
if (!Validator.isNotNull(username)) { ... }
- 带提示的断言式验证(类似 Spring Assert)
if (!condition.test(value)) {
throw new IllegalArgumentException(errorMsg);
}
}
// 使用
validate(user.getPhone(), s -> s.matches("\d{11}"), "手机号必须为11位数字");
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











