# Lambda 概述

# 函数式编程思想

  1. 拿数据做操作,有悖于面向对象操作
  2. 强调做什么,而不是过程

# Lambda 使用前提

  1. 有一个接口
  2. 接口只有一个抽象方法

# Lambda 标准格式

(形式参数) -> {代码块}

  1. ():形式参数
  2. ->:箭头
  3. {}:代码块

# Lambda 使用

# 无参无返

public interface Test1 {
    void domain();
}
public class Demo1 {
    public static void main(String[] args) {
        doDoMain(() -> System.out.println("domain"));
    }
    public static void doDoMain(Test1 t) {
        t.domain();
    }
}

# 带参无返

public interface Test {
    void domain(String s);
}
public class Demo {
    public static void man(String[] args) {
        doDoMain((String s) -> {
            System.out.println(s);
        });
        doDoMain((s) -> System.out.println(s));
        doDoMain(s -> System.out.println(s));
    }
    public static void doDoMain(Test t) {
        t.domain("domain");
    }
}

# 带参有返

public interface Test {
    int add(int a, int b);
}
public class Demo {
    public static void main(String[] args) {
        doAdd((int a, int b) -> {
            return a + b;
        });
        doAdd((a,b) -> a + b);
    }
    public static void adAdd(Test t) {
        int sum = t.add(10,20);
        System.out.println(sum);
    }
}

# 使用说明

# Lambda 的实现

先使用方法,后定义方法体

# 关于 Lambda 的省略

  1. 形式参数类型可以省略,但是尽量不要省
  2. 形式参数如果有一个可以省略小括号
  3. 代码块如果只有一条,可以省略大括号 (对于 return 语句,需要省略掉 return)

# 上下文环境

必须有上下文环境,才能导出 lambda 响应接口

  1. 局部变量的赋值
  2. 调用方法的参数

# Lambda 与匿名内部类的区别

# 所需类型不同

  1. 匿名内部类:接口、抽象类、具体类
  2. Lambda:接口

# 使用限制不同

  1. 匿名内部类:无抽象方法个数限制
  2. Lambda:只能有一个抽象方法

# 实现原理不同

  1. 匿名内部类:产生一个 class 字节码文件
  2. Lambda:字节码动态生成
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Baozi 微信支付

微信支付

Baozi 支付宝

支付宝

Baozi 微信

微信