> 文档中心 > lambda表达式(详)

lambda表达式(详)


函数式编程思想概括:

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

1.2体验Lambda表达式

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

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

Lambda表达式的方式改进

public class Myrun implements Runnable {    @Override    public 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() {     @Override     public void run() {  System.out.println("张岩是舔狗!!!");     } }).start(); //lambda: new Thread(()->{     System.out.println("张岩是舔狗!!!"); }).start();;    }}

1.3 Lambda表达式的标准格式

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

new Thread(new Runnable() {     @Override     public 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);    }}