Java函数式编程笔记

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容