Java Lambda表达式的3种简写方式
使用 Lambda 表达式是为了简化程序代码,Lambda 表达式本身也提供了多种简化形式,这些简化形式虽然简化了代码,但客观上使得代码可读性变差。本节介绍 Lambda 表达式的几种简化形式。
代码第 5 行和第 10 行是《Java Lambda表达式》一节示例中
其中 calculateInt 方法只有一个 int 类型参数,返回值也是 int 类型。调用 calculateInt 方法代码如下:
上述代码第 25 行和第 31 行都是实现 Calculable 接口的 Lambda 表达式。代码第 25 行是标准形式没有任何的简化。代码第 31 行省略了参数类型和小括号。
输出结果为:
上述代码第 12 行是省略了 return 和大括号,这是最简化形式的 Lambda 表达式了,代码太简洁了,但是对于初学者而言很难理解这个表达式。
省略参数类型
Lambda 表达式可以根据上下文环境推断出参数类型。calculate 方法中 Lambda 表达式能推断出参数 a 和 b 是 int 类型,简化形式如下:
- public static Calculable calculate(char opr) {
- Calculable result;
- if (opr == '+') {
- // Lambda表达式实现Calculable接口
- result = (a, b) -> {
- return a + b;
- };
- } else {
- // Lambda表达式实现Calculable接口
- result = (a, b) -> {
- return a - b;
- };
- }
- return result;
- }
result = (int a, int b) -> {
代码的简化写法,其中 a 和 b 是参数。
省略参数小括号
如果 Lambda 表达式中的参数只有一个,可以省略参数小括号。修改 Calculable 接口中的 calculateInt 方法,代码如下。
- // 可计算接口
- @FunctionalInterface
- public interface Calculable {
- // 计算一个int数值
- int calculateInt(int a);
- }
- public static void main(String[] args) {
- int n1 = 10;
- // 实现二次方计算Calculable对象
- Calculable f1 = calculate(2);
- // 实现三次方计算Calculable对象
- Calculable f2 = calculate(3);
- // 调用calculateInt方法进行加法计算
- System.out.printf("%d二次方 = %d \n", n1, f1.calculateInt(n1));
- // 调用calculateInt方法进行减法计算
- System.out.printf("%d三次方 = %d \n", n1, f2.calculateInt(n1));
- }
- /**
- * 通过幂计算
- *
- * @param power 幂
- * @return 实现Calculable接口对象
- */
- public static Calculable calculate(int power) {
- Calculable result;
- if (power == 2) {
- // Lambda表达式实现Calculable接口
- // 标准形式
- result = (int a) -> {
- return a * a;
- };
- } else {
- // Lambda表达式实现Calculable接口
- // 省略形式
- result = a -> {
- return a * a * a;
- };
- }
- return result;
- }
输出结果为:
10二次方 = 100
10三次方 = 1000
省略return和大括号
如果 Lambda 表达式体中只有一条语句,那么可以省略 return 和大括号,代码如下:
- public static Calculable calculate(int power) {
- Calculable result;
- if (power == 2) {
- // Lambda表达式实现Calculable接口
- // 标准形式
- result = (int a) -> {
- return a * a;
- };
- } else {
- // Lambda表达式实现Calculable接口
- // 省略形式
- result = a -> a * a * a;
- }
- return result;
- }
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算