Java 8 Lambda 表达式解析
(arg1, arg2...) -> { body }
(type1 arg1, type2 arg2...) -> { body }
- 一个 Lambda 表达式可以有零个或多个参数
- 参数的类型既可以明确声明,也可以根据上下文来推断。例如:(int a)与(a)效果相同
- 所有参数需包含在圆括号内,参数之间用逗号相隔。例如:(a, b) 或 (int a, int b) 或 (String a, int b, float c)
- 空圆括号代表参数集为空。例如:() -> 42
- 当只有一个参数,且其类型可推导时,圆括号()可省略。例如:a -> return a*a
- Lambda 表达式的主体可包含零条或多条语句
- 如果 Lambda 表达式的主体只有一条语句,花括号{}可省略。匿名函数的返回类型与该主体表达式一致
- 如果 Lambda 表达式的主体包含一条以上语句,则表达式必须包含在花括号{}中(形成代码块)。匿名函数的返回类型与代码块的返回类型一致,若没有返回则为空
(int a, int b) -> { return a + b; }
() -> System.out.println("Hello World");
(String s) -> { System.out.println(s); }
() -> { return 3.1415 };
// Java 8之前:
new Thread(new Runnable() {@Overridepublic void run() {System.out.println("Before Java8, too much code for too little to do");}
}).start();
//Java 8方式:
new Thread( () -> System.out.println("In Java8, Lambda expression rocks !!") ).start();
//定义一个函数式接口
@FunctionalInterface
public interface WorkerInterface {public void doSomeWork();
}
public class WorkerInterfaceTest {
public static void execute(WorkerInterface worker) {worker.doSomeWork();
}
public static void main(String [] args) {//invoke doSomeWork using Annonymous classexecute(new WorkerInterface() {@Overridepublic void doSomeWork() {System.out.println("Worker invoked using Anonymous class");}});//invoke doSomeWork using Lambda expression execute( () -> System.out.println("Worker invoked using Lambda expression") );
}
}
//Java 8之前:
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7);
for(Integer n: list) {System.out.println(n);
}
//Java 8之后:
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7);
list.forEach(n -> System.out.println(n));
// 使用Java 8的方法引用更方便,方法引用由::双冒号操作符标示,
// 看起来像C++的作用域解析运算符
list.forEach(System.out::println);
参考:
Java 8 Lambda 表达式解析相关推荐
- Java 8 Lambda 表达式解析 1
Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性.使用 Lambda 表达式可以使代码变的更加简洁紧凑.坦白的说,初次看见Lambda表达式瞬间头就大了,为了更好的理解, ...
- 10个Java 8 Lambda表达式经典示例
Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表 达式,它将允许我们将行为传到函数里.在J ...
- Java 8 Lambda 表达式详解
版权声明:本文由吴仙杰创作整理,转载请注明出处:https://segmentfault.com/a/1190000009186509 1. 引言 在 Java 8 以前,若我们想要把某些功能传递给某 ...
- Java 8 Lambda 表达式被编译成了什么?
点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取个gui 在了解了Java 8 Lambda的一些基本概念和应用后, 我们会 ...
- Java 8 Lambda表达式10个示例【存】
PS:不能完全参考文章的代码,请参考这个文件http://files.cnblogs.com/files/AIThink/Test01.zip 在Java 8之前,如果想将行为传入函数,仅有的选择就是 ...
- Java 8 Lambda表达式-接口实现
Java 8 Lambda表达式在只有一个方法的接口实现代码编写中,可以起到简化作用: (argument list) -> body 具体看Runnable接口的例子 public class ...
- 这是一个有趣的问题,Java 8 Lambda 表达式被编译成了什么?
在了解了Java 8 Lambda的一些基本概念和应用后, 我们会有这样的一个问题: Lambda表达式被编译成了什么? 这是一个有趣的问题,涉及到JDK的具体的实现.本文将介绍OpenJDK对Lam ...
- java 8 lambda表达式中的异常处理
文章目录 简介 处理Unchecked Exception 处理checked Exception 总结 java 8 lambda表达式中的异常处理 简介 java 8中引入了lambda表达式,l ...
- 设计模式的Java 8 Lambda表达式–命令设计模式
在本博客中,我将说明如何使用Java 8 Lambda表达式以函数式编程方式实现命令模式 . 命令模式的目的是将请求封装为对象,从而为具有不同请求,队列或日志请求的客户端参数化,并支持相应的操作. 命 ...
最新文章
- zynq7020安装linux图形界面,ZYNQ开发板的NFS文件系统安装 - ZYNQ7020学习
- SSM Generator生成mapper中xml文件:未能解析映射资源:“文件嵌套异常
- MySQL之流程控制
- 天人感应是常见的自然规律
- 9个前端常用的数据可视化库
- 2021年中国传统文化锦集(中国人必须了解的)
- 拥有“中国诺贝尔奖”的未来论坛,会告诉我们怎样的未来? | 未来论坛 2017...
- 【数字信号调制】基于ASK+OOK+BPSK+8PSK+QPSK+AM多种算法实现信号调制解调含Matlab源码
- Visual SourceSafe Explorer界面出现乱码+字体翻转
- 没有鸿蒙HarmonyOS,用这个软件也可以实现华为的多屏协助互动!
- matlab实现正割法求根和Aitken加速方法
- php 删除文件 unlink,php 删除文件函数unlink及删除文件夹示例
- 美术绘画之原画场景深入刻画-张聪-专题视频课程
- 多说最近访客通用代码使用方法
- VS2019+OpenCV配置
- GD32串口接收字符串总结
- 武汉理工计算机与自动化专业哪个好,武汉理工大学电气工程及其自动化专业怎么样...
- mootools_MooTools或jQuery的性感专辑封面
- php 卡号生成,生成卡号php代码
- 华为云早报 “会思考”的红绿灯来了!
热门文章
- 推荐7本EEG领域值得阅读的书籍
- eeglab中文教程系列(17)-DIPFIT对独立成分进行等价偶极子定位
- 关卡设计快速入门_6. 执行构建过程
- 为衣服添加NFC功能:挥下袖子就能安全支付,打开车门坐进去就能启动汽车|Nature子刊...
- 2021人工智能年度评选报名即将截止,3大类别6大奖项等你申报
- 1.75万亿参数、在国产超算上训练,刚刚智源发布了全球最大预训练模型“悟道2.0”...
- 中文预训练模型ZEN开源,效果领域内最佳,创新工场港科大出品
- 说人话教AI打游戏,Facebook开源迷你版星际争霸,成果登上NeurIPS 2019
- 环信-获取未读消息数量
- 视频直播营销时代已来,企业该如何把握这波红利?