Java8 IF ELSE IF 优化

    技术2025-05-07  29

    Java8 IF ELSE IF 优化

    现象解决方式if else ifswitch case弊端Java8的实现

    现象

    在程序中总会看到或者碰到很多根据key判断要执行的方法代码等等;

    解决方式

    if else if

    if(StringUtils.equals(key,"1"){ //逻辑1 } else if (StringUtils.equals(key,"2")){ //逻辑2 } //...类型越多代码越繁多

    switch case

    switch (key){ case "1": //逻辑1 break; case "2": //逻辑2 break; /* ... */ default: //默认处理 }

    弊端

    类型越多代码越多,维护不易后来人读起来跳脚骂娘

    Java8的实现

    直接上代码:

    @Controller @RequestMapping("/dc/spring/mvc/ifElse") public class OptimizationIfElseController { /* 这里多入参可以考虑放到一个实体里面,使用Function 如果因业务原因必须多入参两个入参使用BiFunction 再多入参考虑柯里化方式Function<String,BiFunction<String,Map<String, Object>,String>> map.put("1",key->(instuCde,param)-> interface(key,instuCde,param)); */ Map<String, BiFunction<String,Map<String, Object>,String>> map = new HashMap<>(); @RequestMapping(value = "/getIfElse/{code}", produces = "text/plain;charset=UTF-8") public @ResponseBody String getIfElse(@PathVariable("code") String code) { Map< String,Object> map = new HashMap<>(); map.put("Test1","TestValue"); return getReturn(code,"Dc",map); } /** * map初始化 构造函数 > @Autowired > @PostConstruct */ @PostConstruct public void mapInit(){ map.put("1",(instuCde,param)-> new OptimizationIfElse1ServiceImpl().testReturn(instuCde,param)); map.put("2",(instuCde,param)-> new OptimizationIfElse2ServiceImpl().testReturn(instuCde,param)); map.put("3",(instuCde,param)-> new OptimizationIfElse3ServiceImpl().testReturn(instuCde,param)); } /** * 执行程序 * @param className * @param instuCde * @param param * @return */ private String getReturn(String className,String instuCde, Map<String, Object> param){ try { BiFunction<String,Map<String, Object>,String> function = map.get(className); if (Optional.ofNullable(function).isPresent()){ return function.apply(instuCde,param); } return "非正常业务逻辑!"; } catch (Exception e) { return "业务异常!"; } } }

    OptimizationIfElse1ServiceImpl ,OptimizationIfElse2ServiceImpl ,OptimizationIfElse3ServiceImpl 代码差不多只是为了测试,不再全部上了

    @Service public class OptimizationIfElse1ServiceImpl implements OptimizationIfElseService { @Override public String testReturn(String instuCde, Map<String, Object> param) { return StrUtil.format("测试类1【{}】{}",instuCde, JSONObject.toJSONString(param)); } }

    执行结果 Java8的这种方式看着比较优雅,比策略模式看上去更简易,而且阅读起来,各种key要执行的方法在初始化的时候看起来一目了然,更容易理解。 共勉!

    Processed: 0.017, SQL: 9