项目中使用 java函数式编程_函数式编程在Java8中使用Lambda表达式进行开发

事情起因

如果不喜欢看故事的同学,请前往下一章节。

事情起因是我打算集成Redis缓存,配置了Redis以后,发现@Cacheable注解始终不生效,折腾了大半天以后,我的心态已经崩了,决定不使用@Cacheable注解了,自己来设置缓存和读取缓存,当然这篇文章的主题是Lambda表达式,所以缓存的问题一笔带过。在自己获取缓存和设置缓存的时候,发现大量重复的代码,都是一样的if判断语句,所以决定写一个通用的方法把重复的代码干掉,就想到了可以使用函数式编程,Lambda表达式可以精简代码,就分享给大家一下作为参考。

什么是Lambda表达式

Lambda表达式推动Java8发布的最重要新特性。Lambda表达式允许把函数作为一个方法的参数(函数作为参数传递进方法中)。所以你必须升级到 JDK8 以上才可以使用Lambda表达式,如果是 JDK7 的同学就无缘Lambda表达式了。

Lambda表达式的格式

(parameters) -> expression 或 (parameters) ->{ statements; }

圆括号中的参数可以不写类型,编译器可以统一识别参数值;大括号呢在只有一句的情况下可以省略掉大括号

开始使用Lambda表达式

第一步,需要先定义一个函数式接口,例如

?

1

2

3

4

@FunctionalInterface

public

interface

IFunctionObject {

Object function();

}

所谓的函数式接口,首先是接口,然后就是在这个接口里面只能有一个抽象方法。也称为SAM(Single Abstract Method interfaces)接口。注解@FunctionalInterface用于编译检查,如果不符合函数式接口在编译时就会报错,是一个错误检查的功能。

第二步,在具体业务逻辑中调用函数式接口,例如

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

/**

* 从缓存中获取对象,如果没有则运行对象获取接口放入缓存

*

* @param key            H

* @param hashKey        HK

* @param functionObject 对象获取接口

* @return 对象

*/

protected Object cacheGet(String key,

String hashKey,

IFunctionObject functionObject) {

Object object =

null

;

try

{

//从缓存中获取对象

object = redisTemplate.opsForHash()

.get(key, hashKey);

if

(object ==

null

) {

//没有获取到对象,运行对象获取接口放入缓存

object = functionObject.function();

if (object !=null &&

objectinstanceof Serializable)

cacheSetHash(key, hashKey, object);

}

}

catch

(Exception e) {

log.error(e.getMessage(), e);

}

return

object;

}

第三步,使用Lambda表达式调用我们的业务代码,例如:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

/**

* 根据ID获取文章

*

* @param id ID编号

* @return 文章

*/

public

Article getArticleById(Long id) {

//先从缓存中获取,如果没有就从数据库中获取

Article article = (Article)

cacheGet("article", id.toString(),

() -> articleMapper.selectByPrimaryKey(id));

//拿到以后,浏览量加一

if

(article !=

null

) {

setViewAdd(id);

}

return

article;

}

其他函数式接口使用举例:下面的方法都可以使用Lambda表达式调用

java.lang.Runnable,

java.awt.event.ActionListener,

java.util.Comparator,

java.util.concurrent.Callable

java.util.function包下的接口,如Consumer、Predicate、Supplier等

总结

说一下我的理解,Lambda表达式其实就是一个匿名函数,而这个函数可以当做一个参数在方法间传递,可以把函数式接口理解为一个Class类型,Lambda表达式就是这个类型的变量,只不过这个变量比较特殊,他可以运行一些逻辑以后返回结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/244082.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在看世界杯的闲暇看看电视剧《长恨歌》

世界杯开始了,无论重要的和次要的比赛场次都看,整个一个累。还好,反正4年才一次,纵容一下自己也是可以得到原谅的。王安忆的《长恨歌》一直是我关注的作品。上世纪90年代在《钟山》杂志上看过小说;02年在上海大剧院看过…

把王小波作为离我们最近的一个大师

——《王小波全集》出版之际答记者问 1、在您心中,什么是王小波留下的最宝贵的财富。 兴安:一个作家给后人留下的只能是一样东西——作品,这就是他给我们留下的最宝贵的财富。没留下作品,只留下名声的作家是让人怀疑的&#xff0c…

王小波的灾难——由《王小波全集》想到的

在我的书架里,有王小波书的各种版本,最喜欢的是中国青年出版社的4卷本《王小波文集》和华夏出版社的《黄金时代》。前者是精装,系王小波故后出版的影响最大的选本;后者是平装,纸张和封面之简陋不可同日而语&#xff0c…

在java中图片随机播放_如何在Java中随机播放列表

首先,创建一个Integer数组-Integer[] strArray new Integer[] { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };现在,将其转换为列表-Listlist Arrays.asList(strArray);使用Collections随机播放,如下所示-Collections.shuffle(list);示例imp…

2002年呼伦贝尔之行照片

这是2002年8月底我带北京一些朋友去老家呼伦贝尔时拍的一张照片。那时还没有数码相机,只是普通傻瓜相机拍的,所以比较模糊。这个地方属于鄂温克旗草原的腹地,这条河据说叫锡尼河。我们当时是涉水到对岸吃的羊肉白酒野餐。过河时,河…

爱是谋杀:读徐小斌的《别人》

徐小斌在一篇创作谈中引用过萨特的一句话:“爱不过是个枉费心机的企图”,表达了她写作《别人》(《十月》2006年第3期)的最初的想法,这使我想起了奥地利哲学家魏宁格的另一句名言:“爱是谋杀”。——这是我见…

揭开恐怖悬疑小说的“黑匣子”:以《密码王朝》和《巴族迷魂》为例

《密码王朝》(北方文艺出版社2006年4月出版)是国内著名恐怖文学品牌773 悬念系列的最新一部小说,也是成刚“黑匣子”悬疑恐怖系列的第一部。看书名,似有跟风《达芬奇密码》之嫌,但读了文字,感觉还是很中国…

在内蒙古的乌兰浩特

昨天一大早出门,与家人驾车经丰宁、赤峰和通辽,今天到达乌兰浩特,全程大约1000多公里。这是我出生的地方,可是我1岁就随家人去了呼伦贝尔,至尽没回来过。刚到还没什么深的体会,当安定下来再说。后天去阿尔山…

java聚水潭_聚水潭.sln · killvs/jusuitan - Gitee.com

Microsoft Visual Studio Solution File, Format Version 12.00# Visual Studio 2013VisualStudioVersion 12.0.21005.1MinimumVisualStudioVersion 10.0.40219.1Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") "聚水潭", "http:…

已经到呼伦贝尔

已经到呼伦贝尔了。途中经过了当时日本在我国发动诺门汗战争的遗址——新巴尔虎左旗草原。今天刚逛了俄罗斯商品市场。一路上照了非常多的照片,有时间请诸位欣赏。

贴几张旅途的照片

这是一个叫巴彦好硕的地方,蒙古语意思是富饶的山顶。它地处呼伦贝尔草原中心,鄂温克草原深处,绝对的水草丰美,真正的登高远望。这里曾是电影《草原上的人们》拍摄的现场。我是站在山顶上俯视拍照的。我的后面是一个敖包山&#xf…

草原上的路

这是我去额尔古纳的公路上,隔着车窗拍摄的照片。三幅照片可以感觉时间的变化,从午后到黄昏,光和色彩逐渐朦胧凝重,像蒙古画家朝戈的油画。这样的景象在草原上随处可见。沙石路只有在草原的深处可以见到,坐在车里身体会…

落日中的草原

草原的落日就像融化的水彩,顷刻间就可以把大半个天空染得绯红。随着太阳离地面越来越近,她的圆型的轮廓也越来越清晰,云朵、地平线、牛羊和大地的所有都镶上金边儿。这时候的落日更像是油画,色彩厚重而有深度。大地暗淡下来&#…

草原“那达慕”之一

“那达慕”是蒙古语,游戏娱乐的意思。我小时候参加过两次。大学时在中央民族大学我还主持过一届学校的“那达慕”大会。这次参加的是呼伦贝尔伊敏乡召开的“那达慕”,规模小,但是非常有意思,很少外人参与,是真正的草原…

草原“那达慕”之二

赛马是“那达慕”的重头戏。远处灰尘滚滚,比赛的马队飞奔而来,大地为之颤动。草原上的赛马是不分年龄的,也不需要马鞍,有的只是勇敢和智慧。这是获得5000米冠军的10岁小男孩——西吉勒。冠军的父亲举着冠军的名次木牌,…

java abstractset 继_java集合框架-AbstractSet

抽象set继承了抽象集合,只是额外重写了equal和hashCode方法 抽象set是set接口的扩展 public abstract class AbstractSet extends AbstractCollection implements Set { protected AbstractSet() { } 两个set是否相等的比较方式,先比较引用是否相…

金帐汗草原部落之一

金帐汗是以蒙古文化为主体的包括北方其他民族风俗文化的一个以部落形式建造的旅游点。所以它更像是一个建在草原上的博物馆,一次经验古代狩猎、游牧生活方式的时间之旅。在草原上有无数个旅游点,但是只有这个地方我还想再去,实际上我2002年已…

金帐汗草原部落之二

部落内有一棵老树,上面刻着成吉思汗的箴言。部落酋长招待客人的蒙古包,这种规格一般是接待贵宾的,叫“扎玛宴”。奶酪和面包盛在用驯鹿角做的盘子里。“忘不了那神奇的摇篮,神奇的摇篮那是一副雕花的马鞍碍…嗬嗬……在草原上世代…

金帐汗草原部落之三

部落一角。我一直没弄明白这是干什么用的,栓马桩?这是森林鄂温克人居住的“仙人柱”。是用白桦树杆和桦树皮搭建的,我是第一次见,过去在鄂温克作家乌热尔图的小说里听说过。“仙人柱”内的顶棚。这是日本造的铁炉子。据说设计非常…

dibian+9+oracle+java_debian – 安装了Oracle Java,但在安装软件时,我得到了`你的Java版本不受支持....

我想在我的debian jessie机器上安装以下softwarerootwww:~$sudo update-alternatives --config java[sudo] password for root:There are 3 choices for the alternative java (providing /usr/bin/java).Selection Path Priority Status-------------------------------------…