Lambda表达式(从代码理解定义)

1、Lambda表达式

​ Lambda 表达式是一种匿名函数(对 Java 而言这并不完全正确,但现在姑且这么认为),简单地说,它是没有声明的方法,也即没有访问修饰符、返回值声明和名字。

​ 你可以将其想做一种速记,在你需要使用某个方法的地方写上它。当某个方法只使用一次,而且定义很简短,使用这种速记替代之尤其有效,这样,你就不必在类中费力写声明与方法了。

1.1基本方实现类法

首先看一下基础的实现类,一般定义接口与实现接口的三种方法(一般实现类,静态内部类,局部内部类)。

package SunLambda;
//对接口实现类进行调用。
public class Lambda_01 {
    //静态内部类
     static class ILike2 implements LambdaSun{
        @Override
        public void Lambda() {
            System.out.println("学习Lambda让我快乐!2");
        }
    }
    public static void main(String[] args) {
        ILike iLike = new ILike();
        iLike.Lambda();
        ILike2 iLike2 = new ILike2();
        iLike2.Lambda();

        //局部内部类
        class ILike3 implements LambdaSun{
            @Override
            public void Lambda() {
                System.out.println("学习Lambda让我快乐!3");
            }
        }
        ILike3 iLike3 = new ILike3();
        iLike3.Lambda();
    }
}

//定义接口
interface LambdaSun{
    void Lambda();
}

//定义接口实现类
class ILike implements LambdaSun{
    @Override
    public void Lambda() {
        System.out.println("学习Lambda让我快乐!");
    }
}

为什么要用lambda?

使用lambda表达式可对一个接口进行简洁的实现。

lambda对接口的要求

要求接口中定义的必须实现的抽象方法只能有一个(必须要实现的,不是default修饰的)。

1.2lambda简化无参构造方法

package SunLambda;

public class Lambda_02 {


    public static void main(String[] args) {
        //匿名内部类,没有类的名称,必须借助接口或者是父亲
        LambdaSun1 lambda = new LambdaSun1() {
            @Override
            public void Lambda() {
                System.out.println("学习Lambda让我快乐!5");
            }
        };
        lambda.Lambda();
        //用Lambda方法进行简化

        LambdaSun1 lambd = () ->{
                System.out.println("学习Lambda让我快乐!6");
        };
        lambd.Lambda();
        LambdaSun1 lambd1;

        //用Lambda方法进行简化简化2
        lambd1= ()-> System.out.println("学习Lambda让我快乐!7");
        lambd1.Lambda();

    }

}
//定义接口
interface LambdaSun1{
    void Lambda();
}


Lambda实现接口,是有匿名内部类一步步实现的。

注:

1、Lambda表达式只有一行代码的情况下才能简化为一行,多行的话必须使用代码块(也就是{});

2、前提是接口是函数式接口;

3、接口多个参数类型可以去掉参数类型,要去掉都去掉,但必须加括号。

1.3Lambda简化有参数方法

package SunLambda;

public class Lambda_03 {



    public static void main(String[] args) {
    //匿名内部类
        LambdaSun2 lambdasun = new LambdaSun2(){
            @Override
            public void lambda(int a,int b,int c) {
                System.out.println(a+b+c);
            }
        };
        lambdasun.lambda(1,1,1);
        LambdaSun2 lambda;
        //lambda简化1
        lambda =(int a,int b,int c)->{
            System.out.println(a+b+c);
        };
        lambdasun.lambda(2,2,2);
        //lambda简化2
        lambda =( a,b,c)->{
            System.out.println(a+b+c);
        };
        lambdasun.lambda(3,3,3);
        //lambda简化3
        lambda=( a,b,c)-> System.out.println(a+b+c);
        lambdasun.lambda(4,4,4);
    }
}
interface LambdaSun2{
    void lambda(int a,int b,int c);
}

注:接口多个参数类型可以去掉参数类型,要去掉都去掉,但必须加括号。

自学习于哔哩哔哩狂神说JAVA(侵删);

作为自己的笔记,欢迎大家斧正!

posted @ 2020-10-31 20:28  -SUN-  阅读(487)  评论(0编辑  收藏  举报