java中-> 表达式_Java Lambda表达式的3种简写方式

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 20:53   997   0

使用 Lambda 表达式是为了简化程序代码,Lambda 表达式本身也提供了多种简化形式,这些简化形式虽然简化了代码,但客观上使得代码可读性变差。本节介绍 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; }

代码第 5 行和第 10 行是《Java Lambda表达式》一节示例中result = (int a, int b) -> {代码的简化写法,其中 a 和 b 是参数。

省略参数小括号

如果 Lambda 表达式中的参数只有一个,可以省略参数小括号。修改 Calculable 接口中的 calculateInt 方法,代码如下。

// 可计算接口 @FunctionalInterface public interface Calculable { // 计算一个int数值 int calculateInt(int a); }

其中 calculateInt 方法只有一个 int 类型参数,返回值也是 int 类型。调用 calculateInt 方法代码如下:

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; }

上述代码第 25 行和第 31 行都是实现 Calculable 接口的 Lambda 表达式。代码第 25 行是标准形式没有任何的简化。代码第 31 行省略了参数类型和小括号。

输出结果为:

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; }

上述代码第 12 行是省略了 return 和大括号,这是最简化形式的 Lambda 表达式了,代码太简洁了,但是对于初学者而言很难理解这个表达式。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP