Lambda 表达式在 Java 请求处理流中核心作用是将处理逻辑封装为可传递、可组合、可复用的轻量行为单元,广泛应用于校验、转换、日志、异常包装、结果封装及响应式编程等环节。
Java 中 Lambda 表达式在请求处理流中,核心作用是把“处理逻辑”变成可传递、可组合、可复用的轻量行为单元,尤其适合 Web 层(如 Spring MVC)、过滤器链、响应式编程(如 WebFlux)或自定义中间件等场景。它不直接处理 HTTP 请求本身,而是让请求处理的每个环节——校验、转换、日志、异常包装、结果封装——写得更清晰、更紧凑。
在 Controller 方法中,常需对入参做非空、范围、格式等判断。用 Lambda 可快速封装校验逻辑,避免重复 if 块:
BiPredicate<String, Integer> validAge = (name, age) -> name != null && age >= 0 && age <= 150;
@PostMapping("/user") public ResponseEntity<?> createUser(@RequestBody User user) { if (!validAge.test(user.getName(), user.getAge())) { return ResponseEntity.badRequest().build(); } ... }
Predicate 链式组合多个规则,比如 validName.and(validEmail).and(validAge)
返回 JSON 前常需套一层标准结构(如 {"code":200,"data":{...},"msg":"ok"})。Lambda 让封装逻辑变得即用即写:
Function<User, Result<User>> 封装成功响应:Function<User, Result<User>> success = u -> Result.success(u);
return success.apply(newUser);
users.stream().map(success).collect(Collectors.toList())
在自定义 Filter 或 HandlerInterceptor 中,Lambda 适合注入可插拔的横切逻辑:
立即学习“Java免费学习笔记(深入)”;
long start = System.currentTimeMillis(); chain.doFilter(request, response); long cost = System.currentTimeMillis() - start; log.info("Request {} cost {}ms", request.getRequestURI(), cost); → 改为封装成 Consumer<HttpServletRequest> logCost = req -> { /* 同上 */ };
Predicate<HttpServletRequest>,不同接口传入不同策略,实现运行时切换在 Project Reactor(Mono/Flux)中,Lambda 是链式操作的基石:
webClient.get().uri("/api/user/{id}", id).retrieve().bodyToMono(User.class).map(user -> user.withMaskedPhone()).onErrorResume(e -> Mono.just(defaultUser))map、filter、flatMap、doOnNext 接收的都是一个 Lambda,代表一次异步处理步骤