Lamda表达式

Lambda表达式

  • λ是希腊字母表中排序第十一位的字母,英文名为Lambda。
  • 其实质是函数式编程
  • 使用 Lambda 表达式可以使代码变的更加简洁紧凑。
  • 避免匿名内部类定义过多
  • 去掉无意义的代码,留下核心的思维

语法

(params)->expression[表达式]

(params)->statement[语句]

(params)->{statements}

函数式接口(Functional Interface)

定义

  • 任何接口,若只包含唯一抽象方法,那么它就是函数式接口,对于函数式接口,可以使用Lambda表达式来创建对象。

特征

  • 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
  • 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
  • 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
  • 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定表达式返回了一个数值。

代码实现测试

interface FunInterface{
    void did(int a,double b);
}

public class Lamda {
    //静态内部类
    static class Lamda2 implements FunInterface{
        @Override
        public void did(int a,double b) {
            System.out.println("静态内部类实现接口方法");
        }
    }

    public static void main(String[] args) {
        //局部内部类
        class Lamda3 implements FunInterface{
            @Override
            public void did(int a,double b) {
                System.out.println("局部内部类实现接口方法");
            }
        }
        FunInterface l1=new Lamda1();
        FunInterface l2=new Lamda2();
        FunInterface l3=new Lamda3();
        //匿名内部类
        FunInterface l4=new FunInterface() {
            @Override
            public void did(int a,double b) {
                System.out.println("匿名内部类实现接口方法");
            }
        };
        //Lamda表达式
        FunInterface l5=(int a,double b)->{
            System.out.println("Lamda表达式1");
        };
        //省略参数类型
        FunInterface l6=(a,b)->{
            System.out.println("Lamda表达式2");
        };
        //若方法中只有一条语句,可省略中括号
        FunInterface l7=(a,b)-> System.out.println("Lamda表达式2");

        //输出查看
        l1.did(1,3.5);
        l2.did(1,3.5);
        l3.did(1,3.5);
        l4.did(1,3.5);
        l5.did(1,3.5);
        l6.did(1,3.5);
        l7.did(1,3.5);
    }
}

//实现类
class  Lamda1 implements  FunInterface{

    @Override
    public void did(int a,double b) {
        System.out.println("类实现接口方法");
    }
}

输出结果

类实现接口方法
静态内部类实现接口方法
局部内部类实现接口方法
匿名内部类实现接口方法
Lamda表达式1
Lamda表达式2
Lamda表达式2

上一篇:The origin server did not find a current representation for the target resource or is not willing to


下一篇:2022展望(下):来年区块链行业最具潜力的赛道有哪些?