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 表达式推演全过程的更多相关文章

  1. lambda 缩写推演

  2. C++实现委托机制(三)——lambda表达式封装

    C++.引言:              其实原本没打算写这一章的,不过最后想了想,嗯还是把lambda表达式也一并封装进去,让这个委托也适应lambda表达式的注册.不过在之前还是需要先了解lamb ...

  3. 从匿名方法到 Lambda 表达式的推演过程

    Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数. 通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数. 以上是msdn官网对Lambda 表达式 ...

  4. C++11 lambda 表达式

    C++11 新增了很多特性,lambda 表达式是其中之一,如果你想了解的 C++11 完整特性,建议去这里,这里,这里,还有这里看看.本文作为 5 月的最后一篇博客,将介绍 C++11 的 lamb ...

  5. C# 3.0 / C# 3.5 Lambda 表达式

    概述 Lambda 表达式的本质就是匿名函数.(而匿名方法的本质是委托) “Lambda 表达式”是一个匿名函数,可以包含表达式和语句,并且可用于创建委托或表达式树类型. (Lambda 表达式的运算 ...

  6. MVC ---- Lambda表达式

    Lambda表达式是比匿名函数还简洁的一种匿名方法语法 Lambda表达式缩写推演 new Func<string,int>(delegate(string str){return str ...

  7. C++11 lambda 表达式解析

    C++11 新增了很多特性,lambda 表达式是其中之一,如果你想了解的 C++11 完整特性,建议去这里,这里,这里,还有这里看看.本文作为 5 月的最后一篇博客,将介绍 C++11 的 lamb ...

  8. C++11 Lambda表达式简单解析

    C++11 新增了非常多特性,lambda 表达式是当中之中的一个.假设你想了解的 C++11 完整特性, 建议去http://www.open-std.org/看看新标准! 非常多语言都提供了 la ...

  9. 关于Linq中的Lambda表达式中OrderBy的深入理解

    起因:就是一段Linq语句,OrderBy里面的i是什么? IQueryable<Student> slist = (from s in EFDB.Student select s). O ...

随机推荐

  1. 01_Linux基础篇

    学于黑马.传智播客.尚硅谷 感谢 黑马官网 传智播客官网 尚硅谷官网 微信搜索"艺术行者",关注并回复关键词"linux"获取视频和教程资料! b站在线视频 第 ...

  2. C/C++编程笔记:C语言NULL值和数字 0 值区别及NULL详解

    在学习C语言的时候,我们常常会碰到C语言NULL值和数字 0 ,很多小伙伴搞不清楚他们之间的一个区别,今天我们就了解一下他们之间的区别,一起来看看吧! 先看下面一段代码输出什么: 输出<null ...

  3. 重学c#系列——异常(六)

    前言 用户觉得异常是不好的,认为出现异常是写的人的问题. 这是不全面,错误的出现并不总是编写程序的人的原因,有时会因为应用程序的最终用户引发的动作或运行代码的环境而发生错误,比如你用android4去 ...

  4. Spring Security和Swagger2集成报错

    出现问题的项目算是一个新项目,但基本的脚手架代码是从另一个项目里迁过来的,原项目并没有报错,只有新项目才报异常.看报错内容,判断发生冲突的主要是spring-boot-starter-security ...

  5. apicloud版人人商城app打包教程

    一.APP环境搭建和配置编译1.登录APICLOUD后台新建应用 步骤一 .注册账号注册apicloud 账号并登录APICLOUD控制台 注册apicloud 账号:https://www.apic ...

  6. 付费?是不可能的!20行Python代码实现一款永久免费PDF编辑工具

    PDF(Portable Document Format),中文名称便携文档格式是我们经常会接触到的一种文件格式,文献.文档…很多都是PDF格式.它以格式稳定的优势,使得我们在打印.分享.传输过程中能 ...

  7. LInux下Posix的传统线程示例

    简介 Linux线程是需要连接pthreat库,线程的使用比进程更灵活,需要注意的是线程间的互斥,或者说是资源共享问题. C++11之后,C++标准库也引入了线程,并且使用非常方便,以后再介绍,这里先 ...

  8. “随手记”开发记录day18

    我们对我们的APP进行“粉刷”,更加凸显它的亮点.进行最后的界面美化,使其符合大众的审美.

  9. Python爬虫教程:验证码的爬取和识别详解

    今天要给大家介绍的是验证码的爬取和识别,不过只涉及到最简单的图形验证码,也是现在比较常见的一种类型. 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻 ...

  10. SEO(Search Engine Optimization)优化

    SEO(Search Engine Optimization)汉议为搜索引擎优化,是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式. SEO的目的是对网站进行深度的优化,从而帮助网站获取 ...