lamda表达式的由来

Lambda表达式(参考狂神说)

在这里插入图片描述

推导lambda

package test;

/*
推到lambda
 */

import static java.lang.System.*;

public class testlamda1 {

    //3. 静态内部类
    static class Like2 extends Like implements Ilike {
        @Override
        public void lambda() {
            out.println("i like javaee");
        }

        public static void main(String[] args) {
            Ilike like = new Like();
            like.lambda();
            like = new Like2();
            like.lambda();


            //4.局部内部类
            class Like3 extends Like implements Ilike {
                @Override
                public void lambda() {
                    out.println("i like spring ");
                }
            }
            like = new Like3();
            like.lambda();

//            5。匿名内部类(没有类的名称,必须借助接口或父类)
            like = new Ilike(){
                @Override
                public void lambda() {
                    out.println("i like maven");
                }
            };
            like.lambda();

//            6. lambda简化
            like = ()->{
                out.println("i like javase ");
            };
            like.lambda();


        }
    }


    //1. 定义一个函数式接口
    interface Ilike {
        void lambda();
    }

    // 2. 实现类
    static class Like implements Ilike {
        @Override
        public void lambda() {
            out.println("i like java");
        }
    }
}

在这里插入图片描述

例1

package test;

public class testlambda2 {
    public static void main(String[] args) {
        ILove love = (int a)->{
            System.out.println("i love number"+a);
        };
        love.love(14);

    }
}


interface ILove{
    void love(int a);
}

简化

package test;

public class testlambda2 {
    public static void main(String[] args) {
//        简化1
        ILove love = null;
        love = a -> {
            System.out.println("i love "+a);
        };
        love.love(5);
//        简化2
        love = a -> System.out.println("i love aa"+a);
        love.love(520);
    }
}

interface ILove{
    void love(int a);
}


--------------------------------------------------------------------------------------------
package com.dubbo.consumer.testlamda;

//函数式接口
interface Lambda{
void one();
}
//阶段1 通常的实现类
class Stage1 implements Lambda {
@Override
public void one() {
System.out.println("Stage1 普通类实现接口");
}
}
public class TestLambda{
static class Stage2 implements Lambda { //阶段2 静态内部类
@Override
public void one() {
System.out.println("Stage2 静态内部类实现接口");
}
}
public static void main(String[] args) {
// Lambda lambda = new Stage1();
// lambda.one();//查看控制台正常输出
// lambda = new Stage2();
// lambda.one();//查看控制台正常输出
class Stage3 implements Lambda {//阶段3 局部内部类(位于方法中)
@Override
public void one() {
System.out.println("Stage3 局部内部类实现接口");
}
}
// lambda = new Stage3();
// lambda.one();//查看控制台正常输出
//
// lambda = new Lambda() { //阶段4 匿名内部类,在方法中 必须通过接口或者父类才能实例化
// @Override
// public void one() {
// System.out.println(("Stage4 匿名内部类实现接口"));
// }
// };
// lambda.one();//查看控制台正常输出

//阶段5 lambda表达式出现了

Lambda lambda = new Stage1();

lambda = () -> {
System.out.println("lambda来了");
};
lambda.one();//查看控制台正常输出
//另外特例的 函数式接口的参数只有一个时()可以省略,方法体只有一行时{}可以省略
lambda = () -> System.out.println("匿名内部类实现接口");
lambda.one();//查看控制台正常输出
}
}

注意:

  • 代码有多行不能去掉花括号(简化2)== 只能由一行代码
  • 必须是函数式接口(接口里只有一个方法)
posted @ 2021-10-28 10:17  My_blog_s  阅读(61)  评论(0编辑  收藏  举报