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 习惯用语(很详细,还是中文的)