Java中Lambda表达式不直接实现状态机,但可结合枚举、Map或Function接口封装状态转移逻辑:枚举持Function<Event,State>转移函数;Map嵌套结构配Lambda初始化转移表;自定义Transition函数式接口支持策略注入;需规避副作用、统一用枚举防硬编码、关键路径加日志。
Java 中 Lambda 表达式本身不直接实现状态机,但它可以简洁地封装状态转移逻辑,配合枚举、Map 或函数式接口,高效构建轻量级状态机。
将状态定义为枚举,并在每个枚举常量中用 Lambda 表达式绑定“当前状态 → 下一状态”的规则。这种方式类型安全、结构清晰。
Function<Event, State> 类型的转移函数e -> "SUBMIT".equals(e) ? CONFIRMED : this
用嵌套 Map 表示状态转移图,配合 Lambda 在初始化时声明规则,避免冗长 if-else。
Map.of("APPROVE", APPROVED, "REJECT", REJECTED)
transitions.get(currentState).get(event) 查找下一状态定义一个 Transition<S, E> 函数式接口,让 Lambda 承担“状态+事件→新状态”的计算职责。
立即学习“Java免费学习笔记(深入)”;
interface Transition<S, E> { S apply(S currentState, E event); }
(s, e) -> s == IDLE && e instanceof SubmitEvent ? PROCESSING : s
Lambda 适合表达简单、无副作用的状态转移;复杂逻辑(如需持久化、调用外部服务、多步校验)应抽离到独立方法中,Lambda 仅作调度入口。