Java函数式编程笔记

2018-09-04  本文已影响0人  q松_松q

Java函数式编程是Java8的一个特性,之前使用很多,却没有系统的学习,趁空闲整理一下。

定义

首先是区分命令式、声明式和函数式编程:命令式即定义程序每一步;声明式告诉程序做什么,具体细节交给底层的函数库;函数式编程合并了声明式方法与高阶函数。(摘抄,很牛逼就对了

使用

命令式编程中的for和while循环都可以使用lambda表达式来操作,举例:

使用了stream流操作 使用IDE转换的一般写法

        对比之后,函数式编程明显更简洁更酷,可读性很强,并且减少了临时变量的使用。stream的API中我常使用的是map,foreach,filter,sorted,collect,findAny,findFirst(orElse)等,看名字就知道功能了,十分方便。

        当然还有很多好用的函数,比如range函数(控制循环次数),但我用的最多的就是stream(咸鱼脸)。还可以自定义函数接口,我使用不多就没整理,详情可以参考最底部的文档。

lambda级联操作

踩坑

本人使用过程中遇到的一些小问题:

1.不能对变化的集合操作

    

图为流操作里面使用的集合再做流操作

2.foreach函数不会改变原数组

        有次做完任务测试时,报了一个kryo序列化错误,我又是底层打断点调试,又是看逻辑的,最后发现是我在foreach函数中给集合中的每个元素增加了属性,kryo序列化未兼容报错。换成map函数解决了问题。map函数也不会改变原有数组,但是可以返回一个新数组。

3.map和sorted一起使用时

        代码规范问题,建议先处理后排序。

参考文章

Java 8 习惯用语(很详细,还是中文的)

上一篇下一篇

猜你喜欢

热点阅读