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

Java31

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的学生。

输入验证码查看隐藏内容

扫描二维码关注本站微信公众号 Johngo学长
或者在微信里搜索 Johngo学长
回复 svip 获取验证码
wechat Johngo学长

相关文章
Java

哈夫曼树的构建与最小带权路径长度

注意:哈夫曼树并不唯一,但带权路径长度一定是相同的。 二叉树:每个结点最多含有两个子树的树称为二叉树。 定理:对于具有n个叶子结点的哈夫曼树,共有2n-1个结点。 哈夫曼树介绍 1哈夫曼树的定义 哈夫...
Java

Storm4

``` 1 package storm.scheduler; 2 3 import java.lang.management.ManagementFactory; 4 import java.lang...
Java

选择排序

选择排序 原理 第一次从数据中选出最小的元素,放置序列的起始位置([0,n-1]) 第二次从数据中选出最小的元素,放置序列第二个位置([0,n-2]) ... 排序过程 - 原始序列:{7, 1, 3...
Java

ucore操作系统学习(七) ucore lab7同步互斥

1. ucore lab7介绍 ucore在前面的实验中实现了进程/线程机制,并在lab6中实现了抢占式的线程调度机制。基于中断的抢占式线程调度机制使得线程在执行的过程中随时可能被操作系统打断,被阻塞...
Java

我使用Spring AOP实现了用户操作日志功能

我使用Spring AOP实现了用户操作日志功能 今天答辩完了,复盘了一下系统,发现还是有一些东西值得拿出来和大家分享一下。 需求分析 系统需要对用户的操作进行记录,方便未来溯源 第一个想法是在每种方...
Java

设计模式之中介者模式

在我们的实际业务中,可能会有多个类相互调用,形成一个复杂的网状结构。这个时候,需要有一种模式,让他们之间的关系变得顺畅,产生一个中间人,让班级之间不再相互呼唤,这个模式就是我们今天的主角--中介模式。...
Java

MySQL 事务常见面试题总结 | JavaGuide

《Java 面试指北》来啦!这是一份教你如何更高效地准备面试的小册,涵盖常见八股文(系统设计、常见框架、分布式、高并发 ......)、优质面经等内容。 本文原发于 MySQL知识点&面试题总...
Java

Linux具体目录结构

Linux具体目录结构 root : 该目录为系统管理员目录,root是具有超级权限的用户。 bin ->usr/bin : 存放系统预装的可执行程序,这里存放的可执行文件可以在系统的任何目录下...
Java

垃圾收集器与内存分配策略

程序计数器、虚拟机堆栈和本地方法堆栈在创建和执行线程后创建和销毁。堆栈中的堆栈帧通过放大的入口和出口被推入和退出堆栈。在确定类结构时,分配给每个堆栈帧的内存量基本上是已知的,因此这些区域中的内存分配和...
Java

2.HTTP请求的GET与POST方式的区别

答: Get:是以实体的方式得到由请求URI所指定资源的信息,如果请求URI只是一个数据产生过程,那么最终要在响 应实体中返回的是处理过程的结果所指向的资源,而不是处理过程的描述。 Post:用来向目...