带返回值的用
Function
不带返回值的用
Consumer
先说 Function
比如我进来一个List数据 或者一个String 字符串 ,要根据某个字段的值来进行 if else
第一步定义一个 map
private final Map<String, Function<入参,返回参数>> userMap= new HashMap<>();
private final Map<String, Function<User, String>> userMap= new HashMap<>();
User 就是参数,String 是返回值。,参数和返回值都可以随意定义 但是要与实现方法中保持一致
第二步
创建一个方法。这个方法就是 被调用的。比如 从 Controller 里 调他。这里是入口
public String createUser(User param) {
Function<User,String> lisenner = userMap.get(param.getExpress_code());
return lisenner.apply(param);
}
第三步
@PostConstruct
public void dispatcherInit() {
userMap.put("vip",this::vipDosomething);
userMap.put("svip",this::svipDosomething);
userMap.put("csvip",this::csvipDosomething);
......
}
第四步
定义你的方法
public String vipDosomething(User user){
// doSomething
return "";
}
public String svipDosomething(User user){
// doSomething
return "";
}
public String csvipDosomething(User user){
// doSomething
return "";
}
注意的是 参数和返回值与 userMap 保持一致
不带返回值的用Consumer
private final Map<String, Consumer<Map<String,Object>>> map= new HashMap<>();
红色的是参数,可以随意定义 我这里需要这样一个对象
方法
public void orderPontJS(Map<String,Object> map) {
//doSomething
}
本文介绍了如何使用策略模式和函数式编程来替代传统的if else语句。通过定义Map将不同的操作映射到特定的方法上,实现了动态调用不同处理逻辑。以User对象为例,创建了Function类型的Map,以及对应的vipDosomething、svipDosomething和csvipDosomething方法,确保参数和返回值与Map中的定义一致。对于不带返回值的情况,可以使用Consumer进行处理。
3715





