自动JDK8诞生,基于streamapi的程序编码成为程序员秀代码的平台。事实上,除了stream相关api外,提供的lambda表达式,更新精简了不少代码。然而,对于大多数开发者而言,灵活运用基于函数式编程依然窃取,倘若灵活使用jdk8的相关函数式编程,可以有效精简我们的冗余代码,使得我们的代码可以更灵活的复用。这边,今天来谈谈JDK8中的Function具体该如何更灵活的运用,相信通过这篇文章,你有所收获。
一、场景再现
最近要完成一个小功能,该功能在一个工程中有类似业务逻辑实现,我了解了一下,顺便就可以快速实现这个功能模块开发。
现有一个Business类中有如下一个方法
上述方法,通过梳理逻辑,可以得出该方法的主要功能就是如下
1、方法的参数是一个ListLong类型,方法是void返回类型。
2、内部有个循环,通过分页查询,委托给recruitShortVideoDAO查询数据集,如果数据集为空,则跳出循环;不为空,则吧查询的数据集进而调用成员方法sendUpdateUrlEvent。
而我呢,有个功能业务逻辑跟如上方法类似,区别在于接口的方法参数不一样,调用dao的另外一个方法,依然是分页查询,没有数据集则跳出循环。于是,实现逻辑复制如上代码然后最终实现如下:
二、优化思路
我们通过对比如上两个方法syncVideoToDp(ListLongids)和syncNearlyVideoToDp(InstantfromTime)可以发现整体代码业务逻辑很相似,但是呢代码很冗余,为什么呢,因为整体方法业务逻辑逻辑很相似。
根据参数委托dao分页查询数据集,数据集为空,跳出while循环。
数据集不为空,则委托成员方法sendUpdateUrlEvent处理数据。
这时候,我们思考一下,无非区别在于查询的数据集不同,所以我们可以把代码优化如下。
通过提取一个成员方法,不