学员作品 学员心得技术园地 潮人地 Android(安卓)培训 杭州电脑(计算机)培训 杭州网络营销培训 杭州JAVA培训
返回首页
当前位置: 主页 > 学员天地 > 技术园地 >

在java中如何使用函数更好的“函数式”编程?

时间:2017-09-18 15:41来源:未知 作者:杭州华育 点击:
在 java 中如何使用函数更好的函数式编程? 如果想要更加地函数式编程,那么首先要注意的是不要过早的中断monad(一种 设计模式 ,表示将一个运算过程通过函数拆解成互相连接的多个步骤。只要提供下一步运算所需的函数,整个运算就会自动进行下去, Optional、

 

 在java中如何使用函数更好的“函数式”编程?

如果想要更加地“函数式”编程,那么首先要注意的是不要过早的中断monad(一种设计模式,表示将一个运算过程通过函数拆解成互相连接的多个步骤。只要提供下一步运算所需的函数,整个运算就会自动进行下去, Optional、Stream都是monad),比如,很多人经常会在还不需要的时候就调用了Optional.get()和Stream.collect()提前终止monad。本文主要讲述如何通过提升方法来使得代码更”函数式”。

假设有一个接口可以对数字进行计算。

java编程式
我们要使用这个接口来对使用Optional做包装的数字做计算。
 
JAVA语言代码

接着我们来实现一个方法能够返回两个数字相除的结果,结果用Optional包装。如果这两个数字有一个为空则返回空Optional。如下:

JAVA语言代码

上面的代码非常不优雅,有大量的代码都是在做Optional的包装和解包装。可以让上面的代码变得更加“函数式”,如下:

JAVA语言代码

这样代码少了很多,也优雅了很多。先调用第一个Optional的flatMap,再在lambda中调用第二个Optional的map,进一步可以抽取出一个提升方法:

JAVA语言代码

如上,可知这个方法提升能够提升任何具有两个Optional参数、一个Optional结果的函数,使得被提升的函数具有Optional的一个特性:如果一个参数是空的,那么结果就是空的。如果JDK抽取flatMap和map到一个公共接口,如Monad,那么我们可以为Java Monad的每一个实例(Stream、Optional、自己的实现类)实现一个公共的提升函数。但现实是我们不得不为每一个实例都复制粘贴上面的代码。最终的divideFirstTwo代码如下:

 

JAVA语言代码

文章来自杭州java培训

(责任编辑:杭州华育 ;杭州java培训,网络营销培训,杭州计算机培训,it培训,详询客服报名咨询
分享到:
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
提交报名信息

2017年杭州将加大力度经济转型,吸纳更多的技术人才落户杭州,软件人才需求量更是大幅提升,针对目前杭州IT行业人才需求“井喷”现象,华育软件杭州实训基地与杭州155家IT名企合作,建立人才培养与输送关系,启动“Eduask国家高端IT紧缺人才培养工程”。7月针对杭州地区18-28岁大中专生待业青年发放68个技能实训名额(应届大中专毕业生优先),经短期专业岗前实训后推荐进入企业,起薪4500-8000元,五险一金。

姓名: * 性别:
学历: 电话: *
所在地: *
您目前状况:
留言:
*