《Java工程师必读手册》——Java极客主义系列——最完美的Lambda表达式只有一行(6)

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: 《Java工程师必读手册》——Java极客主义系列——最完美的Lambda表达式只有一行(6)

接上篇:

https://developer.aliyun.com/article/1226755?spm=a2c6h.12873581.technical-group.dArticle1226755.524d5a5cxQxTxO

七、 Lambda表达式实践

 

上面介绍了这么多知识,这章将详细介绍Lambda表达式的实践。这里,将以ODPS查询封装为例子,详细地介绍如何使用和优化Lambda表达式。

 

1. 查询ODPS数据代码

 

这里,有一段查询公司雇员的方法:

 

image.png

 

类似地,还有几段从ODPS查询数据的代码。

 

2. 利用内部类进行优化

 

因为上面代码的重复性,我们可以采用设计模式——模板方法模式(Template Method Pattern),把相同的部分固化下来,并把不同的部分抽象出接口。那么,我们就抽象出一个接口DataParser(数据解析器),并把ODPS数据查询固化到OdpsService的executeQuery方法中。

 

image.png

 

那么,采用匿名内部类的编写方法,可以把queryEmployee改为:

 

image.png

 

 

3. 利用Lambda表达式优化

 

从上面例子可以看出,利用内部类实现queryEmployee方法,由于模式代码比较多,显得代码比较啰嗦。这里,利用Lambda表达式进行优化。

 

image.png

 

可以看出,代码量大大地减少了。

 

4. 去掉自定义的函数式接口

 

为了减少代码中自定义函数式接口,可以利用Java提供的4个基本函数式接口。这里,我们采用函数接口“FunctionT>”替换掉“DataParser”。

 

image.png

 

5. 利用提取方法优化Lambda表达式

 

上面的例子中,最大的问题就是——Lambda表达式理解困难,没有一个名称或注释,需要看完Lambda表达式后才能理解。通过第6章的方法,可以把Lambda表达式抽象成一个方法,从而达到优化Lambda表达式的目的。

 

image.png

 

6. 利用方法引用优化Lambda表达式

 

我们使用Lambda表达式,就是希望代码更精简。上面例子中,Lambda表达式还可以采用方法引用的方式进行精简,从而最终达到“完美的Lambda表达式只有一行”的目标。

 

image.png

 

7. 变化1:需要传递参数或变量

 

如果需要把方法参数companyId传给每一个EmployeeDO对象,最终的代码如下:

 

image.png

 

8. 变化2:需要抽象出多个方法

 

如果需要抽象出多个方法,还想使用函数式编程,就需要声明多个函数式接口参数。比如:分批查询并保存数据。

 

image.png

 

注意

“parseEmployee”被定义为static方法,方法引用为“EmployeeService::parseEmployee”;而“storageEmployee”被定义为private方法,方法引用为this::storageEmployee。具体原因,请参考第3章。

 

9. 总结:由繁至简,由简至明

 

通过这个过程,可以总结出一个使用Lambda表达式的历程——“由繁至简,由简至明”:

 

1) 由繁至简

 

通过Lambda表达式,消除了很多模式代码,把复杂的代码进行简化;但是,也正由于代码过于简略,失去了代码可读性和可维护行。

 

2) 由简至明

 

为了提高代码的可读性和可维护行,又不得不损失一些简化,利用提取方法等机制,让Lambda表达式变得更明确。


接下篇:https://developer.aliyun.com/article/1226748?groupCode=java

 

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
6天前
|
Java
探索Java中的Lambda表达式
【9月更文挑战第28天】Lambda表达式,这一Java 8引入的轻量级语法结构,为函数式编程提供了强有力的支持。它简化了代码,提高了开发效率,并使得并行处理数据变得异常容易。本文将通过直观的例子和详细的解释,带领读者深入理解Lambda表达式的奥秘,从而在编程实践中更加灵活地运用它们。
|
8天前
|
Java API
探索Java中的Lambda表达式
【9月更文挑战第27天】Lambda表达式,作为Java 8的一大亮点,为我们的编程世界带来了一股清新之风。它以其简洁明了的语法和强大的功能,让我们在处理集合、线程等复杂操作时如鱼得水。本文将带你一探Lambda表达式的奥秘,让你领略到它的魅力所在。
18 6
|
5天前
|
Java 开发者
探索Java中的Lambda表达式:简化你的代码之旅##
【8月更文挑战第62天】 Java 8的发布为开发者带来了诸多新特性,其中最引人注目的无疑是Lambda表达式。这一特性不仅让代码变得更加简洁,还极大地提升了开发的效率。本文将通过实际示例,展示如何利用Lambda表达式来优化我们的代码结构,同时探讨其背后的工作原理和性能考量。 ##
|
6天前
|
Java API 开发者
探索Java中的Lambda表达式
【9月更文挑战第29天】Lambda表达式,在Java编程中,它不仅仅是一种语法糖,更是简化代码、提升效率的利器。本文将通过浅显易懂的语言和实际代码示例,带你走进Lambda的世界,了解其背后的原理和在日常开发中的应用,让你的代码更简洁、更高效。
|
8天前
|
Java API 开发者
探索Java中的Lambda表达式:简化代码,提升效率
【9月更文挑战第27天】在Java 8中引入的Lambda表达式为编程带来了革命性的变化。通过简洁的语法和强大的功能,它不仅简化了代码编写过程,还显著提升了程序的执行效率。本文将深入探讨Lambda表达式的本质、用法和优势,并结合实例演示其在实际开发中的应用。无论你是Java新手还是资深开发者,都能从中获得启发,优化你的代码设计。
|
Java Unix 数据库管理
java定时框架:表达式设置
Quartz中时间表达式的设置-----corn表达式 (注:这是让我看比较明白的一个博文,但是抱歉,没有找到原作者,如有侵犯,请告知)   时间格式: ,   分别对应: 秒>分>小时>日>月>周>年,  举例: 1.
866 0
|
7天前
|
安全 Java 调度
Java编程时多线程操作单核服务器可以不加锁吗?
Java编程时多线程操作单核服务器可以不加锁吗?
21 2
|
11天前
|
存储 缓存 Java
java线程内存模型底层实现原理
java线程内存模型底层实现原理
java线程内存模型底层实现原理
|
15天前
|
缓存 Java 应用服务中间件
Java虚拟线程探究与性能解析
本文主要介绍了阿里云在Java-虚拟-线程任务中的新进展和技术细节。
|
12天前
|
Java 开发者
Java中的多线程基础与应用
【9月更文挑战第22天】在Java的世界中,多线程是一块基石,它支撑着现代并发编程的大厦。本文将深入浅出地介绍Java中多线程的基本概念、创建方法以及常见的应用场景,帮助读者理解并掌握这一核心技术。
下一篇
无影云桌面