为什么会有Lambda表达式 ?

为什么会有Lambda表达式 ?

前言
一开始感觉Lambda可读性蛮差的,不知道为什么Java8会出来这个表达式?既然大佬们推出来,肯定是有原因的,那我们就看看解决了什么问题?

案例

1、来自广州大学城的有哪些同学

为什么会有Lambda表达式 ?_第1张图片

上面的伪代码,是不是很简单,写一个方法,直接过滤出广州大学城的学生。

现在想知道来自北京的有哪些同学,那代码执行优化一下,可以动态传地区参数。

2、地区参数化

为什么会有Lambda表达式 ?_第2张图片

这样是不是就解决了,所有地区的查询问题,把地区作为一个参数。

3、可以查出20岁以上的学生

为什么会有Lambda表达式 ?_第3张图片
这一次直接到位,把年龄参数化。

有没有发现findStudentByArea和findStudentByAge两个方法里面的代码是不是很像,有很多重复的代码。

改造一下

因为上面是两个方法,很多小伙伴会想到可以改成一个方法,用flag标记查询的业务。
为什么会有Lambda表达式 ?_第4张图片

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

调用方式

原创

策略模式

策略模式改造下:
原创

定义一个接口,用来进行过滤的接口,我们可以实现这个接口,去完成不同的需求,如:
为什么会有Lambda表达式 ?_第5张图片

上面定义了两种查询条件,都是实现了StudentPredicate接口,那我们再看看主方法:
为什么会有Lambda表达式 ?_第6张图片
上面的核心代码就是p.test(stu);这个就是查询条件逻辑实现方法;要查询某个业务,只需要把相关业务的接口实现传给这个主方法就行了。
原创
缺点:每个需求都要去写相关的接口实现。

匿名类

为了解决接口实现太多,可以采用匿名类去解决,再来优化一下
为什么会有Lambda表达式 ?_第7张图片

大大的减少了接口实现类,需要什么业务需求,直接在调用方法的时候建立匿名类去实现就行了。

Lambda表达式

Java8中新增了Lambda表达式,我们看看:
实现方式:
为什么会有Lambda表达式 ?_第8张图片

希望对大家有所帮助,over!

你可能感兴趣的:(Java)