享学课堂特邀作者:老顾
转载请声明出处!
前言
Java8有一些新的特性,今天老顾给大家分享一下关于Lambda表达式的由来,一开始感觉Lambda可读性蛮差的,不知道**为什么Java8会出来这个表达式?**既然大佬们推出来,肯定是有原因的,应该是为了解决一些问题,那我们就看看解决了什么问题?
案例
班导想了解一下各个同学的相关情况:
1、来自苏州的有哪些同学
上面的伪代码,是不是很简单,写一个方法,直接过滤出苏州地区的学生。
班导又想知道来自北京的有哪些同学,那代码执行优化一下,可以动态传地区参数。
2、地区参数化
这样是不是就解决了,所有地区的查询问题,把地区作为一个参数。
问题好像得到了解决,突然班导又要知道同学们的年龄分布。
3、可以查出20岁以上的学生
这一次直接到位,把年龄参数化。
我们发现因为班导的两个需求,根据地区和年龄查找学生,我们程序员提供了两个方法,filterStudentByArea和filterStudentByAge。
我们小伙伴们有没有发现,此两个方法里面的代码是不是很像,有很多重复的代码。不过满足需求就行了,还能接受是吧。
改造一下
因为上面是两个方法,很多小伙伴会想到可以改成一个方法,用flag标记查询的业务。
改为一个方法,flag为true 表示根据年龄范围查找学生;flag为false,表示查地区里面的学生
调用方式
List<Student> areaStudentList = filterStudent(students,"苏州",0,false);
List<Student> ageStudentList = filterStudent(students,"",20,true);
虽然改造了一个方法,但实现方式比较恶心。
小伙伴们会说那就不要优化了,两个方法就两个呗。其实如果需求不变了,这样也是没问题的,但如果班导又提出要根据学生成绩进行查询,或又要根据学生的体重、身高等;每增加一个维度都要写相应的方法,导致很多重复的代码。
作为一个有上进心的,有追求的程序员,这种方案感觉很变扭,要想个方法解决。突然想到了JAVA的设计模式,是不是可以用这个解决啊,我们来看看。
策略模式
还好我们的小伙伴们知道一点设计模式,那用策略模式进行改造吧
定义一个接口,用来进行过滤的接口,我们可以实现这个接口,去完成不同的需求,如:
上面定义了两种查询条件,都是实现了StudentPredicate接口,那我们再看看主方法
上面的核心代码就是p.test(stu);这个就是查询条件逻辑实现方法;要查询某个业务,只需要把相关业务的接口实现传给这个主方法就行了。
上面的方式代码相对比较优美,如有别的查询需求,只要实现StudentPredicate接口就行了。但这点也是个缺点,每个需求都要去写相关的接口实现。
匿名类
为了解决接口实现太多,可以采用匿名类去解决,再来优化一下
这种方式大大的减少了接口实现类,需要什么业务需求,直接在调用方法的时候建立匿名类去实现就行了。匿名类的方式,我们的大佬觉得还是不够简洁,所以Java8中新增了Lambda表达式,我们看看。
Lambda表达式
我们来看看Lambda表达式的实现
小伙伴们看看,是不是很简洁。
总结
每个技术的出现肯定是为了解决一些问题的,小伙伴们在学习的时候,一定要知道为什么,解决什么问题,这样会对我们了解这个技术点更深入,下一篇老顾再来说说Lambda表达式的具体用法,谢谢!!!
总结
一般像这样的大企业都有好几轮面试,所以自己一定要花点时间去收集整理一下公司的背景,公司的企业文化,俗话说「知己知彼百战不殆」,不要盲目的去面试,还有很多人关心怎么去跟HR谈薪资。
这边给大家一个建议,如果你的理想薪资是30K,你完全可以跟HR谈33~35K,而不是一下子就把自己的底牌暴露了出来,不过肯定不能说的这么直接,比如原来你的公司是25K,你可以跟HR讲原来的薪资是多少,你们这边能给到我的是多少?你说我这边希望可以有一个20%涨薪。
最后再说几句关于招聘平台的,总之,简历投递给公司之前,请确认下这家公司到底咋样,先去百度了解下,别被坑了,每个平台都有一些居心不良的广告党等着你上钩,千万别上当!!!
提供【免费】的Java架构学习资料,学习技术内容包含有:Spring,Dubbo,MyBatis, RPC, 源码分析,高并发、高性能、分布式,性能优化,微服务 高级架构开发等等。
Java全套进阶资料点这里免费领取
还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书。
TbFJ1cmN1R2dB)**
还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书。