Lamda(拉姆达)表达式演化过程

HI!小伙伴们,好久没见了,4月份开始断更,中途有点事儿,今天开始更新了,整理一篇Lamda表达式演化过程,希望喜欢的一如既往的支持!

传统集合过滤

现在有2个需求:在一组学生集合中, 1.找出年龄大于20学生 2.找出分数小于70的学生;下面让我们看看代码吧!

如上代码:代码逻辑比较简单,findStudentByAge() 方法是通过年龄过滤学生,在students学生集合中通过循环过滤出大于年龄20的学生放入新的集合stus中,最终返回stus对象,同理,通过分数过滤学生也是这样,在测试方法test1中,调用findStudentByAge()和findStudentByScore();最终打印输出结果如下:

代码的结果我们输出了,结果输出没有问题,但是看上去有些臃肿,因为除了过滤条件外,for循环等其他的好像都是重复的,如果我们需要再增加一个通过姓名过滤学生,又得写一个方法。针对已有代码,下面我们看看策略模式如何解决!

演化1:接口策略模式

我们新增一个处理学生集合的接口

如上代码:新建StudentHandler接口处理学生,HandlerAge实现类实现了StudentHandler,用于过滤学生年龄大于20的对象,getStudents方法接收stus和studentHandler对象分别表示原始学生对象和接口实现new HandlerAge(),调用该方法最终打印学生年龄大于20的对象,和上面结果一致。如果现在我们需要通过分数处理,我们新增一个HandlerScore类实现StudentHandler接口就可以了,大家可以自行测试下, 但是有个缺点,类变多了。下面我们看看匿名内部类如何实现过滤分数小于70的学生。

演化2:匿名内部类

如上代码:该匿名对象实现了过滤分数小于70的学生。

演化3:lamda表达式

上面的代码已经足够简单,但自从JDK1.8开始支持了Lambda,我们针对上面的代码再做一次优化。

如上代码:student -> student.getScore()

好啦,今天我们就讲到这里,希望大家有疑问可以提问,欢迎和我交流。我是【 公众号:叫练,边叫边练 喜欢的可以加关注哦!再次感谢大家的观看支持。

Original: https://www.cnblogs.com/jiaolian/p/15020834.html
Author: 叫练
Title: Lamda(拉姆达)表达式演化过程

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/589882/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球