使用 Lambda 表达式是为了简化程序代码,Lambda 表达式本身也提供了多种简化形式,这些简化形式虽然简化了代码,但客观上使得代码可读性变差。本节介绍 Lambda 表达式的几种简化形式。

省略参数类型

Lambda 表达式可以根据上下文环境推断出参数类型。calculate 方法中 Lambda 表达式能推断出参数 a 和 b 是 int 类型,简化形式如下:

public static Calculable calculate(char opr) {Calculable result;if (opr == '+') {// Lambda表达式实现Calculable接口5   result = (a, b) -> {return a + b;};} else {// Lambda表达式实现Calculable接口10    result = (a, b) -> {return a - b;};}return result;
}

代码第 5 行和第 10 行是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接口// 标准形式25       result = (int a) -> {return a * a;};} else {// Lambda表达式实现Calculable接口// 省略形式
31        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接口// 省略形式12       result = a -> a * a * a;}return result;
}

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

1.22 Lambda表达式的3种简写方式相关推荐

  1. Lambda表达式的几种使用方式

    Lambda 的表达式的编写格式如下: x=> x * 1.5 当中 " => " 是 Lambda 表达式的操作符,在左边用作定义一个参数列表,右边可以操作这些参数. ...

  2. lambda表达式的3种写法

    lambda表达式: 简单来说,可以看成是对匿名内部类的简写.使用Lambda表达式时,接口必须是函数式接口 基本语法: <函数式接口>  <变量名> = (参数1,参数2.. ...

  3. lambda表达式与6种方法引用格式

    继JDK 1.8之后,更新了lambda的新特性 lambda是一种强调做什么,而不是用什么去做的语法 而匿名内部类则是强调如何去做,用了什么去做这件事的语法 函数式接口:有且仅有一个抽象方法的接口, ...

  4. Python:lambda表达式的两种应用场景

    1.lambda表达式 python书写简单,功能强大, 迅速发展成为 AI ,深度学习的主要语言.介绍Python中的lambda表达式,注意到,它只是一个表达式,不是语句啊. lambda的语法规 ...

  5. java单个变量的表达式_java中使用Lambda表达式的5种语法

    1,标准写法 思考下述情况: String[] arr = {"program", "creek", "is", "a" ...

  6. lambda表达式的五种写法 四大内置函数式接口

    /*Lambda表达式作用: 简化匿名内部类对象使用前提: 函数式接口函数式接口: 只有一个必须被重写的抽象方法的接口称为函数式接口检查函数式接口注解: @FunctionalInterface 强制 ...

  7. 计算机程序的思维逻辑 (91) - Lambda表达式

    本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>(马俊昌著),由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买:京东自营链接 ...

  8. Lambda表达式常用代码示例

    Lambda表达式常用代码示例 2017-10-24 目录 1 Lambda表达式是什么 2 Lambda表达式语法 3 函数式接口是什么   3.1 常用函数式接口 4 Lambdas和Stream ...

  9. Java 函数式编程和 lambda 表达式

    为什么要使用函数式编程 函数式编程更多时候是一种编程的思维方式,是种方法论.函数式与命令式编程的区别主要在于:函数式编程是告诉代码你要做什么,而命令式编程则是告诉代码要怎么做.说白了,函数式编程是基于 ...

最新文章

  1. JavaScript判断浏览器类型及版本
  2. linux守护进程中多线程实现,Linux下实现多线程客户/服务器
  3. android的dmtracedump工具生成trace文件图片 'dot' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
  4. 使用H5实现机器人脸
  5. 远控免杀专题2---msfvenom的隐藏参数
  6. 高德地图时间和实际差多少_高德打车,谁用谁上当,谁用谁吃亏
  7. F-Scrack 弱口令检测脚本
  8. Java打印菱形(一)
  9. java 获取32位纯数字 或字母与数字结合的唯一id
  10. 汽车HUD抬头显示全产业链深度解析报告
  11. linux编译n2n v2,在centos下安装n2n服务器
  12. 瑞芯微rv1126/1109软硬件解压缩对比---附:关于内存对齐的那些事
  13. 【一周书讯】网络安全、云计算、人工智能、大数据一网打尽
  14. PaddleNLP基于ERNIR3.0文本分类以中医疗搜索检索词意图分类(KUAKE-QIC)为例【多分类(单标签)】
  15. 系统分析师---论软件的系统测试及应用
  16. java读取xslx内容,内容转换成docx和pdf,包括图片
  17. 股票6题(Aced)
  18. 不权威的国产CPU发展历程
  19. 第三空间与第四空间的幻想(序言篇)
  20. SAAS PAAS IAAS

热门文章

  1. Paper之Algorithms:国内外Algorithms高质量论文、CUMCM分类推荐(建议收藏,持续更新)
  2. 盘点selenium phantomJS使用的坑
  3. LLBLGen update table with join
  4. table thead 固定 tbody滚动
  5. 霍金:AI或许能根除疾病和贫穷,但也可能摧毁人类 | GMIC 2017
  6. 蓝桥杯-打印十字图-java
  7. (线段树)Just a Hook -- hdu -- 1689
  8. 【Hello CC.NET】巧用模板简化配置
  9. PL/SQL DEVELOPER 使用小技巧
  10. (chap2 TCP/IP基础知识) TCP/IP协议分层模型