ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-11-01 19:02:04  阅读:205  来源: 互联网

标签:实现 小伙伴 接口 这么久 程序员 解决 查询 方法 Lambda


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

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

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

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

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

我们小伙伴们有没有发现,此两个方法里面的代码是不是很像,有很多重复的代码。不过满足需求就行了,还能接受是吧。

改造一下

因为上面是两个方法,很多小伙伴会想到可以改成一个方法,用flag标记查询的业务。

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

调用方式

List areaStudentList = filterStudent(students,“苏州”,0,false);
List ageStudentList = filterStudent(students,"",20,true);

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

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

作为一个有上进心的,有追求的程序员,这种方案感觉很变扭,要想个方法解决。突然想到了JAVA的设计模式,是不是可以用这个解决啊,我们来看看。

策略模式

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

定义一个接口,用来进行过滤的接口,我们可以实现这个接口,去完成不同的需求,如:

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

![](http

【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】

浏览器打开:qq.cn.hn/FTf 免费领取

s://upload-images.jianshu.io/upload_images/15590149-a8966a77300cde05?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

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

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

匿名类

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

实现太多,可以采用匿名类去解决,再来优化一下

[外链图片转存中…(img-CKski44I-1635764080264)]

标签:实现,小伙伴,接口,这么久,程序员,解决,查询,方法,Lambda
来源: https://blog.csdn.net/m0_63174811/article/details/121086105

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有