美文网首页
Java8 Functional 替换 if-else 代码块

Java8 Functional 替换 if-else 代码块

作者: Fenix_Liu | 来源:发表于2022-05-17 00:06 被阅读0次

    冗长的 if-else 块是开发人员的噩梦,很难维护,并且有很多副作用。sonar将这些代码块标记为“Cognitive complexities”。
    Java8提供了函数接口,可以与Predicate配合,很好的替换传统的 if-else 代码块。
    例如,如下代码块


    image.png

    我们可以借助predicates和functions将上面的 if-else 代码块转换为规则矩阵。if-else可以转换为predicate并且相应的执行规则可以转换为function。然后我们把predicate和相应的function存储到Map中,从而生成规则矩阵。


    image.png
    上面类中定义的 getRule 方法将接收一个对象 Cart,并通过filter过滤rulemap中的predicate 返回要应用于它的相应函数。
    Function和Predicate可以定义为单独类中的常量,这将有助于扩展规则。
    image.png
    image.png

    使用这个规则矩阵非常简单ー取出规则(即相应的函数)并应用到购物车上。就可以向复杂的代码块say byebye!

    RuleMatrix.getRule(cart6).apply(cart6)
    
    image.png

    相关文章

      网友评论

          本文标题:Java8 Functional 替换 if-else 代码块

          本文链接:https://www.haomeiwen.com/subject/ydanurtx.html