Java8 Functional 替换 if-else 代码块

冗长的 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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容