Lambda 表达式推演全过程
Java 的 Lambda 表达式推演过程:
第一步:正常的类实现(外部实现),new一个对象,然后重写方法实现
public class TestLambda3 {
public static void main(String[] args) {
Human human = new Man();
human.run(1);
}
}
//定义一个函数式接口
interface Human {
void run(int a);
}
//外部实现类
class Man implements Human {
@Override
public void run(int a) {
System.out.println("A man can run fast --> " + a);
}
}
第二步:把类的实现放到内部,静态内部类
public class TestLambda3 {
//实现类:静态内部类
static class Man implements Human {
@Override
public void run(int a) {
System.out.println("A man can run fast --> " + a);
}
}
public static void main(String[] args) {
Human human = new Man();
human.run(2);
}
}
//定义一个函数式接口
interface Human {
void run(int a);
}
第三步:局部内部类
public class TestLambda3 {
public static void main(String[] args) {
//实现类:局部内部类
class Man implements Human {
@Override
public void run(int a) {
System.out.println("A man can run fast --> " + a);
}
}
Human human = new Man();
human.run(3);
}
}
//定义一个函数式接口
interface Human {
void run(int a);
}
第四步:匿名内部类,没有类的名称,必须借助接口或父类
public class TestLambda3 {
public static void main(String[] args) {
//实现类:匿名内部类
Human man = new Human(){
@Override
public void run(int a) {
System.out.println("A man can run fast --> " + a);
}
};
man.run(4);
}
}
//定义一个函数式接口
interface Human {
void run(int a);
}
第五步:Lambda简化
public class TestLambda3 {
public static void main(String[] args) {
//Lambda简化
Human man = (a) -> {
System.out.println("A man can run fast --> " + a);
};
man.run(5);
}
}
//定义一个函数式接口
interface Human {
void run(int a);
}
第六步:Lambda 再简化成一行
public class TestLambda3 {
public static void main(String[] args) {
//Lambda简化
Human man = a -> System.out.println("A man can run fast --> " + a);
man.run(6);
}
}
//定义一个函数式接口
interface Human {
void run(int a);
}
总结:
1、 对于函数式接口,我们可以通过 Lambdaa 表达式来创建该接口的对象。
2、什么是函数式接口?任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口。
3、如果接口不是函数式接口,就不能用 Lambda 表达式来创建该接口的对象了。
4、Java 的 Runnable 接口就是函数式接口,该接口里面只有一个 run() 方法。
5、如果方法的执行体里面有多行,就不能做到第六步里面那样简化成一行,需要用第五步里的 {} 包裹代码段。
为什么要使用 Lambda 表达式?
1、避免匿名内部类定义过多
2、可以让你的代码看起来很简洁
3、去掉了ー堆没有意义的代码,只留下核心的逻辑。
Lambda 表达式推演全过程的更多相关文章
- lambda 缩写推演
- C++实现委托机制(三)——lambda表达式封装
C++.引言: 其实原本没打算写这一章的,不过最后想了想,嗯还是把lambda表达式也一并封装进去,让这个委托也适应lambda表达式的注册.不过在之前还是需要先了解lamb ...
- 从匿名方法到 Lambda 表达式的推演过程
Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数. 通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数. 以上是msdn官网对Lambda 表达式 ...
- C++11 lambda 表达式
C++11 新增了很多特性,lambda 表达式是其中之一,如果你想了解的 C++11 完整特性,建议去这里,这里,这里,还有这里看看.本文作为 5 月的最后一篇博客,将介绍 C++11 的 lamb ...
- C# 3.0 / C# 3.5 Lambda 表达式
概述 Lambda 表达式的本质就是匿名函数.(而匿名方法的本质是委托) “Lambda 表达式”是一个匿名函数,可以包含表达式和语句,并且可用于创建委托或表达式树类型. (Lambda 表达式的运算 ...
- MVC ---- Lambda表达式
Lambda表达式是比匿名函数还简洁的一种匿名方法语法 Lambda表达式缩写推演 new Func<string,int>(delegate(string str){return str ...
- C++11 lambda 表达式解析
C++11 新增了很多特性,lambda 表达式是其中之一,如果你想了解的 C++11 完整特性,建议去这里,这里,这里,还有这里看看.本文作为 5 月的最后一篇博客,将介绍 C++11 的 lamb ...
- C++11 Lambda表达式简单解析
C++11 新增了非常多特性,lambda 表达式是当中之中的一个.假设你想了解的 C++11 完整特性, 建议去http://www.open-std.org/看看新标准! 非常多语言都提供了 la ...
- 关于Linq中的Lambda表达式中OrderBy的深入理解
起因:就是一段Linq语句,OrderBy里面的i是什么? IQueryable<Student> slist = (from s in EFDB.Student select s). O ...
随机推荐
- Django学习路33_url 地址及删除元素 delete() 和重定向 return redirect('路径')
保存日期 def create(request): '''新增一本图书''' # 1.创建BookInfo对象 b = BookInfo() b.btitle = '流星蝴蝶剑' b.bpub_d ...
- 记一次使用commit提交大文件无法推送到远程库解决问题过程及git rebase使用
记一次使用commit提交大文件无法推送到远程库解决问题过程及git rebase使用 目录 大文件无法push到远程仓库 问题 commit的大文件无法push到远程库解决办法 git filter ...
- PHP date_diff() 函数
------------恢复内容开始------------ 实例 计算两个日期间的差值: <?php$date1=date_create("2013-03-15");$da ...
- bzoj 4974 [Lydsy1708月赛]字符串大师 KMP 最小循环元 构造
LINK:字符串大师 给出一个字符串的每个前缀的最小循环元 还原字典序最小的原字符串. 一个比较显然的结论 或者说 学过KMP的都知道 对于每个前缀i求出nex数组后 那么i-nex[i]为最小循环元 ...
- dsu on tree详解
这个算法还是挺人性化的,没有什么难度 就是可能看起来有点晕什么的. 大体 思想是 利用重链刨分来优化子树内部的查询. 考虑一个问题要对每个子树都要询问一次.我们暴力显然是\(n^2\)的. 考虑一下优 ...
- 网络安全 - SSL/TLS协议运行机制的概述
大学时也系统学过相关的网络安全,但那时并没有理论联系实践,稀里糊涂的,现在才意识到所学的东西都是好东西,可惜已晚. 来自http://www.ruanyifeng.com/blog/2014/02/s ...
- Java线程知识:二、锁的简单使用
锁的初步认识 说到锁,相信大家都不陌生,这是我们生活中非常常见的一种东西,它的形状也各式各样.在生活中,我们通常用锁来锁住房子的大门.装宠物的笼子.装衣服的衣柜.以及装着我们一些小秘密的小抽屉.... ...
- python 爬虫刷访问量
import urllib.requestimport time # 使用build_opener()是为了让python程序模仿浏览器进行访问opener = urllib.request.buil ...
- 畅购商城(八):微服务网关和JWT令牌
好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star,更多文章请前往:目录导航 畅购商城(一):环境搭建 畅购商 ...
- Linux学习笔记之如何把ubuntu下的c文件共享到windows下文件夹
1.首先可在桌面新建文件夹,或者自己任意路径文件夹都可以, 2.在Linux下点击虚拟机 点击设置 点击选项,选择共享文件夹,点击总是启用,然后添加文件夹,添加你windows下想保存的文件夹 可 ...