详细入门解读 JDK1.8 新特性之lambda表达式

目录:

  • 1、什么是Lambda表达式
  • 2、 函数式接口
  • 3、Lambda表达式的推导
      • 3.2.1用静态内部类简化
      • 3.2.2用局部内部类简化
      • 3.2.3 用匿名内部类简化
      • 3.2.4 用lambda简化(进入正题)

1、什么是Lambda表达式

lambda表达式
它是JDK8的新特性之一,JDK8这个版本包含语言、编译器、库、工具和JVM等方面的十多个新特性。在本文中我们将学习lambda表达式。

为什么要使用lambda表达式?
1、避免匿名内部类定义过多
2、可以让你的代码看起来很简洁
3、去掉了一堆没有意义的代码,只留下核心的逻辑

也许你会说,我看了Lambda表达式,不但不觉得简洁,反而觉得更乱,看不懂了。那是因为我们还没有习惯,用的多了,看习惯了,就好了。

2、 函数式接口

函数式接口:任何接口,如果只包含一个抽象方法,那么他就是函数式接口。对于函数式接口,我们可以通过lambda表达式来创建该接口的对象。

3、Lambda表达式的推导

我将从静态内部类,局部内部类,匿名内部类,一步步简化推导出lambda表达式的由来,它与其他方法对比,更能看出它的优点。

package com.yuan;

/**
 * @description:
 * @author: ManolinCoder
 * @time: 2022/3/3
 */
public class Test1 {
    public static void main(String[] args) {
        IStudy iStudy = new Study();
        iStudy.lambda();
    }

}

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

//实现类
class Study implements IStudy{

    @Override
    public void lambda() {
        System.out.println("我爱学习lambda");
    }
}

详细入门解读 JDK1.8 新特性之lambda表达式_第1张图片
以上是我们平时通过实现接口,创建对象,然后调用方法的例子

3.2.1用静态内部类简化

因为上面例子实现类在外部,这时就想如果把实现类放在类的内部则会方便许多。于是就有了静态内部类:在类的内部定义实现类,class关键字前面加上static

package com.yuan;

/**
 * @description:
 * @author: ManolinCoder
 * @time: 2022/3/3
 */
public class Test1 {

    static class Study implements IStudy{

        @Override
        public void lambda() {
            System.out.println("我爱学习lambda");
        }
    }

    public static void main(String[] args) {
        IStudy iStudy = new Study();
        iStudy.lambda();
    }

}

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

详细入门解读 JDK1.8 新特性之lambda表达式_第2张图片

3.2.2用局部内部类简化

上面的例子我们也可以把实现类放在main方法里面,如下代码:

package com.yuan;

/**
 * @description:
 * @author: ManolinCoder
 * @time: 2022/3/3
 */
public class Test1 {

    public static void main(String[] args) {

        //局部内部类
        class Study implements IStudy{
            @Override
            public void lambda() {
                System.out.println("我爱学习lambda");

            }
        }
        IStudy iStudy = new Study();
        iStudy.lambda();
    }

}

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

详细入门解读 JDK1.8 新特性之lambda表达式_第3张图片

3.2.3 用匿名内部类简化

匿名内部类:没有类的名称,必须借助接口或者父类,代码和实现格式如下:记着后面的分号

package com.yuan;

/**
 * @description:
 * @author: ManolinCoder
 * @time: 2022/3/3
 */
public class Test1 {

    public static void main(String[] args) {

         IStudy study = new IStudy() {
            @Override
            public void lambda() {
                System.out.println("我爱学习lambda");
            }
        };

         study.lambda();
    }

}

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

详细入门解读 JDK1.8 新特性之lambda表达式_第4张图片

3.2.4 用lambda简化(进入正题)

下面代码充分地解释了lambda表达式的使用格式,可以看出代码量真的少了很多。

package com.yuan;

/**
 * @description:
 * @author: ManolinCoder
 * @time: 2022/3/3
 */
public class Test1 {

    public static void main(String[] args) {

        IStudy study = ()->{
            System.out.println("我爱学习lambda");
        };
        study.lambda();
        
    }

}

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

详细入门解读 JDK1.8 新特性之lambda表达式_第5张图片

小结:

从以上代码可以看出在想要实现接口,调用接口内方法的过程中,无论是原始方法,或者是用静态内部类、局部内部类、匿名内部类时,其核心带式就是:
在这里插入图片描述
而相比之下lambda表达式就显得非常简洁:

IStudy study = ()->{
            System.out.println("我爱学习lambda");
        };

也可以简化成一行:

IStudy study = ()-> System.out.println("我爱学习lambda");

注意:lambda表达式只能有一行代码的情况下才能简化成一行,如有多行,那么就用代码块(大括号)包裹。

你可能感兴趣的:(spring,java,后端)