Java8特性使用函数代替分支语句

  

传统的多分支方式(圈复杂度为6):

        公共字符串(字符串类型){   如果(“1”.equals(类型)){   返回“1”;   }else if (“2”.equals(类型)){   返回“2”;   }else if (“3”.equals(类型)){   返回“3”;   }else if (“4”.equals(类型)){   返回“4”;   }else if (“5”.equals(类型)){   返回“5”;   其他}{   返回“没有”;   }   }      

使用函数函数式编程的新方式:

        私人Map<字符串,Function<字符串,String>比;地图=new HashMap<在();      公共order2字符串(字符串类型){   init ();   String> Function<字符串;有趣=map.get(类型);   字符串的结果=fun.apply(类型);   返回结果;   }   公共空间init () {   地图。把(“1”→{   System.out.println(“执行1分支”);   返回一个+“1”;   });   地图。把(“2”→{   System.out.println(“执行2分支”);   返回一个+“22”;   });   地图。把(“3”→{   System.out.println(“执行3分支”);   返回一个+“333”;   });   地图。put (“4”→{   System.out.println(“执行4分支”);   返回一个+“4444”;   });   地图。把(“5”→{   System.out.println(“执行5分支”);   返回一个+“55555”;   });   }      

圈复杂度为0;

  

<强>总结:

  

1。函数是一个接口,它完整的样子是这样:Function其中T表示接受一个T类型的入参,R表示返回一个R类型的出参,注意:既然入参和出参都是一个泛型,那就说明可以适用于任何种类的方法,如果方法需要多个入参,可以把它们封装成T类型的入参签证官,如果出参也需要有多个参数,也可以把它们封装为一个R类型的出参VO。

  

2。应用方法是函数函数的统一执行标志性方法,它接受第一条提到的T T,返回第一条提到的R R,不管功能函数体有多复杂,统统按应用执行,就像所有的线程统统用开始开始执行。

  

3。以前在有很多if - else的场合时,也想过把决定分支的入参(用类型表示)和所执行的代码建立映射关系,但那时候因为不懂函数,心里想地图里面只能装数据类型,像分支逻辑这种不是数据类型,没法装。如今学习了功能,发现它把代码逻辑也封装得了,正好满足了我的设想。真的太好用了。

  

4。以前用if - else执行多分支时,走入不同分支还需要一个个对照,现在用了函数式编程,直接根据地图查映射关系就找到了,很是方便。

  

<强>最后总结:

  

以后遇到if - else较多的场合,可以考虑使用函数函数代替

  

普通的方法是将一种数据类型作为参数,而函数的方法是将一种方法或表达式作为参数。

  

=======================补充:与策略模式的对比=======================

  

策略模式也是为了解决分支过多问题,此外它还解决另一个大问题:避免代码侵入,新增策略不需要修改原有策略代码。此处主要对比第一点:解决分支过多

  

策略模式通过两层结构,完美实现了传入不同的策略,执行不同的方案,这与if - else的目标是一致的,当然与函数的目标也是一致的。

  

传入1,选择策略,执行策略1

  

传入2,选择策略,执行策略2

  

如何实现传入N,就能选择策略N呢& # 63;使用映射表Map<字符串,Strategy>,这点和函数的思想是一样,只不过策略模式通过类型获取封装好的策略实例,而函数通过类型获取封装好的策略方法。

  

从广义上说,if - else,函数,策略模式,它们三者都是策略,解决的都是分支问题,只不过粒度由小到大,重量级不同而已。

  

如何选择呢& # 63;

  

能用if - else就不用函数,能用函数就不用策略模式

  

简单的,就用轻量级的

  

复杂的,就用重量级的。

  

===============题外思考:地图的三种用法================

  
      <李>初级:Map<字符串,普通数据类型的在======在通过一个数据可以获取另一个数据李   <李>中级:Map<字符串,函数/表达式祝辞=======比;通过一个数据可以获取一个方法李   <李>高级:Map<字符串,模式的在=============比;通过一个数据可以获取一个设计李   
  

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

Java8特性使用函数代替分支语句