函数式编程思想概括:

在数学中,函数就是有输入量、输出量的一套计算方案,也就是“拿数据做操作”
面向对象思想强调“必须通过对象的形式来做事情”
函数式思想则尽量忽略面向对象的复杂语法:“强调做什么, 而不是以什么形式去做”
而我们要学习的L ambda表达式就是函数式思想的体现

1.2体验Lambda表达式

需求:启动一个线程,在控制台输出一句话:多线程程序启动了
方式1:
●定义一个类MyRunnable实现Runnable接口, 重写run0方法
创建MyRunnable类的对象

创建Thread类的对象,把MyRunnable的对象作为构造参数传递
启动线程
方式2:
●匿名内部类的方式改进
方式3:

Lambda表达式的方式改进

public class Myrun implements Runnable {@Overridepublic void run() {System.out.println("张岩是舔狗!!!");}
}public class Lambda01 {public static void main(String[] args) {//调用对象Myrun run=new Myrun();Thread t=new Thread(run);t.start();//匿名内部类方式new Thread(new Runnable() {@Overridepublic void run() {System.out.println("张岩是舔狗!!!");}}).start();//lambda:new Thread(()->{System.out.println("张岩是舔狗!!!");}).start();;}
}

1.3 Lambda表达式的标准格式

匿名内部类中重写run0方法的代码分析

       new Thread(new Runnable() {@Overridepublic void run() {System.out.println("张岩是舔狗!!!");}}).start();

●方法形式参数为空,说明调用方法时不需要传递参数
●方法返回值类型为void,说明方法执行没有结果返回
●方法体中的内容, 是我们具体要做的事情
Lambda表达式的代码分析

new Thread(()->{System.out.println("张岩是舔狗!!!");
}).start();;

●(): 里面没有内容,可以看成是方法形式参数为空
-●>:用箭头指向后面要做的事情

●{}:包含一 段代码,我们称之为代码块,可以看成是方法体中的内容

组成Lambda表达式的三s要素:形式参数,箭头,代码块

Lambda表达式的格式

●格式: (形式参数)-> {代码块}
●形式参数: 如果有多个参数,参数之间用逗号隔开;如果没有参数,留空即可
●->:由英文中画线和大于符号组成,固定写法。代表指向动作
●代码块: 是我们具体要做的事情,也就是以前我们写的方法体内容

注意:前提:

有一个接口;

接口中有且仅有一个抽象方法;

练习1:(最详细的写法每一步都清楚)

●定义一个接口(Eatable), 里面定义一个抽象方法: void eat0;
●定义一个测试类(Lamdba02), 在测试类中提供两个方法
●一个方法是: useEatable(Eatable e)
●一个方法是主方法,在主方法中调用useEatable方法

package lambda;public interface Eatable {void eat();
}package lambda;//        ●定义一个接口(Eatable), 里面定义-一个抽象方法: void eat0;
//        ●定义一个测试类(EatableDemo), 在测试类中提供两个方法
//        ●一个方法是: useEatable(Eatable e)
//        ●一个方法是主方法,在主方法中调用useEatable方
public class Lambda02 {private static void useEatable(Eatable e){e.eat();}public static void main(String[] args) {useEatable(()->{System.out.println("张岩是舔狗");});}
}

练习2:(最为大众的写法,写起来简单快捷)

变为两个参数:


package lambda;public class Lambda04 {public static void main(String[] args) {Eatable01 e=(x, y)->//x,y的类型可以省略System.out.println(x+y);//只有一个语句花括号也可以省略e.zhou(2021,"海绵hong更帅");}public interface Eatable01 {void zhou(int x,String y);}
}

省略条件:

  1. 方法的类型可以省略
  2. 只有一个语句花括号也可以省略(除return不行)
  3. 只有一个参数,括号也可以省略
  4. 只有一条语句省略花括号也要吧return也要省略
package lambda;public class Lambda03 {public static void main(String[] args) {Addable add=(x,y)->x+y;System.out.println(add.add(123,123));}public interface Addable {int  add(int x,int y);}}

lambda表达式(详)相关推荐

  1. java拉姆达表达式事例,Java Lambda表达式详解和实例

    简介 Lambda表达式是Java SE 8中一个重要的新特性.lambda表达式允许你通过表达式来代替功能接口. lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体( ...

  2. java lambda表达式详解_Java8新特性Lambda表达式详解

    课程目标: 通过本课程的学习,详细掌握Java8新特性之Lambda表达式: 适用人群:有Java基础的开发人员: 课程概述:从Java 8出现以来lambda是最重要的特性之一,它可以让我们用简洁流 ...

  3. Java8 Lambda表达式详解手册及实例

    先贩卖一下焦虑,Java8发于2014年3月18日,距离现在已经快6年了,如果你对Java8的新特性还没有应用,甚至还一无所知,那你真得关注公众号"程序新视界",好好系列的学习一下 ...

  4. java8 lambda 表达式详解

    lambada 表达式实质上是一个匿名方法,但该方法并非独立执行,而是用于实现由函数式接口定义的唯一抽象方法 使用 lambda 表达式时,会创建实现了函数式接口的一个匿名类实例 可以将 lambda ...

  5. jdk8新特性 lambda表达式详解

    本文主要讲到的内容有: 一- 前言 二- 背景 三- lambda表达式的语法 四- Lambda程序例子 4-1 Runnable Lambda 4-2 Comparator Lambda 4-3 ...

  6. Java 8 Lambda 表达式详解

    版权声明:本文由吴仙杰创作整理,转载请注明出处:https://segmentfault.com/a/1190000009186509 1. 引言 在 Java 8 以前,若我们想要把某些功能传递给某 ...

  7. C++中的Lambda表达式详解

    函数对象与Lambdas 你编写代码时,尤其是使用 STL 算法时,可能会使用函数指针和函数对象来解决问题和执行计算.函数指针和函数对象各有利弊.例如,函数指针具有最低的语法开销,但不保持范围内的状态 ...

  8. java函数式编程_Java 函数式编程和 lambda 表达式详解

    作者:DemonsI my.oschina.net/demons99/blog/2223079 为什么要使用函数式编程 函数式编程更多时候是一种编程的思维方式,是种方法论.函数式与命令式编程的区别主要 ...

  9. Lambda表达式详解【一】

    以前在编程中很不喜欢用lambda表达式,但是又老是看别人在用,好吧,只能来看一下.找来几次,就这个博客还行 Lambda简介# Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿名内 ...

  10. 【Java Lambda表达式】Lambda表达式详解、Lambda表达式的等效使用方式、多线程

    1.静态内部类 静态内部类,属于类中的类,好处是:如果不使用,就不会被编译. 如果把这个类放到方法中,成为局部内部类(看下一部分) package cn.hanquan.test;/*Lambda表达 ...

最新文章

  1. amf java_java – 不支持的AMF版本
  2. python 3d绘图-python - 轻松学会Matplotlib 3D绘图
  3. 【RK PX30】 瑞芯微四核64位工业级芯片PX30 | 安卓核心板
  4. oracle db-link 分布式数据库网络配置协议错误,Oracle学习(18)【DBA向】:分布式数据库...
  5. java 利用JAX-RS快速开发RESTful 服务
  6. python将2个列表list合并到1个列表使用appenden_【新手入门】20个很实用的 Python 学习小技巧...
  7. caffe 添加自定义层(custom layer)
  8. 为什么通常在类的init函数下一行写super().__init__()?==>就是执行父类的构造函数,使得我们能够调用父类的属性
  9. Linux驱动(10)--注册驱动
  10. Dubbo学习笔记(二)
  11. 95-30-030-java.util-hashMap
  12. Java基础学习总结(92)——Java编码规范之排版、注释及命名
  13. Spring EL中的类操作符
  14. 【预测模型】基于遗传算法优化最小二乘支持向量机实现数据分类matlab代码
  15. 网页前端培训(JavaScript)
  16. python中count方法
  17. 如何获取QQ邮箱授权码——步骤详解
  18. Python绘制TSP、VRP问题求解结果图
  19. board oracle tarot_Thoth and the Tarot dpedtech(透特和塔罗牌dpedtech).pdf
  20. 嵌入式ARM下使用ALSA USB声卡

热门文章

  1. DFS遍历图时的小技巧
  2. 使用C语言扩展Python(三)
  3. Latex中设置字体颜色
  4. dotnet调用node.js写的socket服务(websocket/socket/socket.io)
  5. 阿里云文件存储和自我管理的云解决方案的TCO比较
  6. [转载]SQL Server行列转换实现
  7. 再学 GDI+[11]: DrawCurve - 绘制曲线
  8. 彻底理解大数据 HDFS 分布式文件系统,这篇就够了
  9. 丢掉虚拟机,在裸机上使用 Kubernetes 六大优势!
  10. 原来你离进大厂,只差这些面试题!