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

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

接上篇:https://developer.aliyun.com/article/1226756?spm=a2c6h.12873581.technical-group.dArticle1226756.524d5a5cxQxTxO

六、 完美的Lambda表达式

 

简短的Lambda表达式是提高代码可读性这是函数式编程的重要好处之一。但是,复杂的Lambda表达式具有相反的效果,会让代码变得更加杂乱且难以阅读。如果将复杂的Lambda表达式变成一行,这样就很容易避免这些问题。这里,作者提倡一个理念——“最完美的Lambda表达式只有一行”。

 

如何把Lambda表达式简化为一行,作者总结了以下方法供大家参考。

 

1. 利用省略语法来简化Lambda表达式

 

利用Lambda省略语法,尽量把Lambda表达式精简为单语句的表达式,使其成为只有一行的最完美的Lambda表达式。常见的精简Lambda表达式的省略语法有:

 

去掉参数类型Lambda表达式不需要声明参数类型,编译器可以自动识别参数类型;

去掉参数圆括号Lambda表达式只有一个参数无需定义圆括号,但多个参数需要定义圆括号;

去掉主体大括号如果Lambda表达式主体只有一条语句,就不需要定义主体的大括号;

去掉返回关键字如果Lambda表达式主体只有一条返回语句,就不需要定义返回关键字。

 

下面,将以“求1到100的偶数和”为例说明如何“精简为单语句表达式”。

 

原始代码

 

image.png

 

优化代码

 

image.png

 

2. 利用方法引用来简化Lambda表达式

 

通过上一章方法优化的单语句Lambda表达式,还有可能存在继续优化的空间。比如,可以替换为方法引用Lambda表达式(包括构造方法引用、静态方法引用、实例方法引用和参数类方法引用),会让Lambda表达式显得更精简。

 

原始代码

 

image.png

 

优化代码

 

image.png

 

在上面优化代码中,同时采用了三种方法引用语法:

 

Objects::nonNull采用了静态方法引用语法;

Student::getId采用了参数类方法引用语法;

TreeSet::new采用了构造方法引用语法。

 

3. 利用提取方法来简化Lambda表达式

 

对于无法简化为单语句或方法引用的多语句Lambda表达式,可以先提取Lambda表达式为一个方法,然后采用静态方法引用语法或实例方法引语法用来简化Lambda表达式。

 

原始代码

 

image.png

 

 

优化代码

 

image.png

 

在上面例子中,提取Lambda表达式为一个私有静态方法,然后采用静态方法引用简化Lambda表达式。为什么不提取Lambda表达式为一个私有普通方法呢?因为提取的buildEmployee方法非常独立,不依赖与EmployeeService类中的任何属性字段,一般建议定义为私有静态方法。


接下篇:

https://developer.aliyun.com/article/1226751?groupCode=java

相关文章
|
1天前
|
Java
蓝易云 - Java-Lambda表达式
这将输出 "Hello world"。这就是Java中Lambda表达式的基本用法。
14 2
|
3天前
|
Java 数据处理
Java的运算符与表达式详解
Java的运算符与表达式详解
10 1
|
3天前
|
Java API
Java的Lambda表达式与函数式接口的技术性文章
Java的Lambda表达式与函数式接口的技术性文章
6 0
|
3天前
|
Java API
Java 8新特性之Lambda表达式和Stream API
【5月更文挑战第31天】本文将详细介绍Java 8中的两个重要特性:Lambda表达式和Stream API。通过对比传统编程方式,我们将探讨这两个特性如何简化代码、提高可读性和性能。文章还将通过实例演示如何使用Lambda表达式和Stream API进行集合操作、过滤和转换等任务。
|
4天前
|
Java 开发者
Java的三元表达式用法
Java的三元表达式用法
|
4天前
|
Java 编译器
Java 8新特性之Lambda表达式与函数式接口
【5月更文挑战第30天】本文将介绍Java 8中的一个重要新特性——Lambda表达式,以及与之密切相关的函数式接口。我们将通过实例分析Lambda表达式的语法、使用方法和优势,同时探讨函数式接口的定义和应用。通过本文的学习,你将能够更好地理解和运用Java 8的这一新特性,提高编程效率和代码可读性。
|
4天前
|
Java 测试技术 编译器
Java的表达式合法性判断
Java的表达式合法性判断
|
17天前
|
Java API
Java 8新特性之Lambda表达式与Stream API
【5月更文挑战第17天】本文将介绍Java 8中的两个重要特性:Lambda表达式和Stream API。Lambda表达式是一种新的编程语法,它允许我们将函数作为参数传递给其他方法,从而使代码更加简洁。Stream API是一种用于处理集合的新工具,它提供了一种高效且易于使用的方式来处理数据。通过结合使用这两个特性,我们可以编写出更加简洁、高效的Java代码。
26 0
|
5天前
|
Java API
Java 8新特性之Lambda表达式与Stream API
【5月更文挑战第29天】本文将介绍Java 8中的两个重要特性——Lambda表达式和Stream API。Lambda表达式简化了函数式编程,使得代码更加简洁易读;而Stream API则为集合操作提供了更加高效且易于理解的方法。通过本文的学习,你将掌握这两个特性的基本用法,并了解如何在实际项目中应用它们。
|
6天前
|
Java API
Java 8新特性之Lambda表达式与Stream API
【5月更文挑战第28天】本文将介绍Java 8中的两个重要特性:Lambda表达式和Stream API。Lambda表达式是一种新的语法特性,允许我们将函数作为参数传递给方法或者作为返回值。而Stream API是一种处理集合的新方式,它提供了一种高效且简洁的方式来处理数据。通过学习这两个特性,我们可以编写出更加简洁、高效的Java代码。