作了这么久的程序员,你知道为何会有 Lambda 表达式吗?

Java8 有一些新的特性,今天老顾给你们分享一下关于 Lambda 表达式的由来,一开始感受 Lambda 可读性蛮差的,不知道 为何 Java8 会出来这个表达式?既然大佬们推出来,确定是有缘由的,应该是为了解决一些问题,那咱们就看看解决了什么问题?java

班导想了解一下各个同窗的相关状况:程序员

一、来自苏州的有哪些同窗

上面的伪代码,是否是很简单,写一个方法,直接过滤出苏州地区的学生。面试

班导又想知道来自北京的有哪些同窗,那代码执行优化一下,能够动态传地区参数。算法

二、地区参数化

这样是否是就解决了,全部地区的查询问题,把地区做为一个参数设计模式

问题好像获得了解决,忽然班导又要知道同窗们的年龄分布。学习

三、能够查出 20 岁以上的学生

这一次直接到位,把年龄参数化优化

咱们发现由于班导的两个需求,根据地区和年龄查找学生,咱们程序员提供了两个方法,filterStudentByArea 和 filterStudentByAge。设计

咱们小伙伴们有没有发现,此两个方法里面的代码是否是很像,有不少重复的代码。不过知足需求就好了,还能接受是吧。code

由于上面是两个方法,不少小伙伴会想到能够改为一个方法,用 flag 标记查询的业务。视频

改成一个方法,flag 为 true 表示根据年龄范围查找学生;flag 为 false,表示查地区里面的学生

调用方式

List<Student> areaStudentList = filterStudent(students,"苏州",0,false);
List<Student> ageStudentList = filterStudent(students,"",20,true);

虽然改造了一个方法,但实现方式比较恶心。

小伙伴们会说那就不要优化了,两个方法就两个呗。其实若是需求不变了,这样也是没问题的,但若是班导又提出要根据学生成绩进行查询,或又要根据学生的体重、身高等;每增长一个维度都要写相应的方法,致使不少重复的代码

正是金九银十跳槽季,为你们收集了2019年最新的面试资料,有文档、有攻略、有视频。有须要的同窗能够在公众号【Java知己】,发送【面试】领取最新面试资料攻略!暗号【1024】千万不要发,不然.....

四、使用JAVA 的设计模式

做为一个有上进心的,有追求的程序员,这种方案感受很变扭,要想个方法解决。忽然想到了 JAVA 的设计模式,是否是能够用这个解决啊,咱们来看看。

还好咱们的小伙伴们知道一点设计模式,那用策略模式进行改造吧

定义一个接口,用来进行过滤的接口,咱们能够实现这个接口,去完成不一样的需求,如:

上面定义了两种查询条件,都是实现了 StudentPredicate 接口,那咱们再看看主方法

上面的核心代码就是 p.test(stu);这个就是查询条件逻辑实现方法;要查询某个业务,只须要把相关业务的接口实现传给这个主方法就好了

上面的方式代码相对比较优美,若有别的查询需求,只要实现 StudentPredicate 接口就好了。但这点也是个缺点,每一个需求都要去写相关的接口实现。

为了解决接口实现太多,能够采用匿名类去解决,再来优化一下

这种方式大大的减小了接口实现类,须要什么业务需求,直接在调用方法的时候创建匿名类去实现就好了。匿名类的方式,咱们的大佬以为仍是不够简洁,因此 Java8 中新增了 Lambda 表达式,咱们看看。

咱们来看看 Lambda 表达式的实现

小伙伴们看看,是否是很简洁。

每一个技术的出现确定是为了解决一些问题的,小伙伴们在学习的时候,必定要知道为何,解决什么问题,这样会对咱们了解这个技术点更深刻,下一篇老顾再来讲说 Lambda 表达式的具体用法,谢谢!!!


“不积跬步,无以致千里”,但愿将来的你能:有梦为马 随处可栖!加油,少年!

关注公众号:「Java 知己」,天天更新 Java 知识哦,期待你的到来!

  • 发送「面试」,领取 BATJ 面试资料、面试视频攻略。
  • 发送「Group」,与 10 万程序员一块儿进步。
  • 发送「玩转算法」,领取《玩转算法》系列视频教程。
  • 千万不要发送「1024」,不然......
相关文章
相关标签/搜索