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. 在excel中如何给一列数据批量加上双引号

    在实际开发中,会遇到这样的需求,大量的数据,需要从配置文件里读取,客户给到的枚举值是字符串,而配置文件里的数据,是json格式,需要加上双引号,这样就需要使用Excel来批量格式化一下数据. 客户给到 ...

  2. java多线程之锁 -- 偏向锁、轻量级锁、自旋锁、重量级锁

    转载至:https://blog.csdn.net/zqz_zqz/article/details/70233767 之前做过一个测试,详情见这篇文章<多线程 +1操作的几种实现方式,及效率对比 ...

  3. samba服务及配置

    samba 目录 samba 1. samba简介 2. samba访问 配置示例 3.搭建用户认证共享服务器 4.搭建匿名用户共享服务器 1. samba简介 Samba是在Linux和UNIX系统 ...

  4. rabbitMQ结合spring-boot使用(1)

    从这一节开始我们进入rabbitMQ的实战环节,项目环境是spring-boot 加maven.首先让我们创建一个spring-boot项目,然后引入web依赖和 rabbitMQ的依赖 <de ...

  5. Dropwizard+jersey+MDC实现日志跟踪以及接口响应时间统计

    一.实现接口响应时间统计 1.1添加全局请求过滤器并注册 import org.apache.log4j.MDC; import org.slf4j.Logger; import org.slf4j. ...

  6. Linux操作系统 可插拔认证模块PAM(3)

    六.Linux 操作系统安全登陆设计 自己编写PAM 模块并编译成动态链接库so 文件,将其添加进/etc/pam.d/login 文件中实现命令行安全登陆设计,将其添加进/etc/pam.d/lig ...

  7. 有用的20个Python代码段

    Python是一种非BS编程语言.设计简单和易读性是它广受欢迎的两大原因.正如Python的宗旨:美丽胜于丑陋,显式胜于隐式. 记住一些帮助提高编码设计的常用小诀窍是有用的.在必要时刻,这些小诀窍能够 ...

  8. SpringBoot学习之整合Swagger

    Swagger介绍 1.什么是Swagger 作为后端程序开发,我们多多少少写过几个后台接口项目,不管是编写手机端接口,还是目前比较火热的前后端分离项目,前端与后端都是由不同的工程师进行开发,那么这之 ...

  9. Apache Hudi表自动同步至阿里云数据湖分析DLA

    1. 引入 Hudi 0.6.0版本之前只支持将Hudi表同步到Hive或者兼容Hive的MetaStore中,对于云上其他使用与Hive不同SQL语法MetaStore则无法支持,为解决这个问题,近 ...

  10. C#LeetCode刷题之#53-最大子序和(Maximum Subarray)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4012 访问. 给定一个整数数组 nums ,找到一个具有最大和的 ...