详细入门解读 JDK1.8 新特性之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");
    }
}

在这里插入图片描述
以上是我们平时通过实现接口,创建对象,然后调用方法的例子

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();
}

在这里插入图片描述

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();
}

在这里插入图片描述

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();
}

在这里插入图片描述

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();
}

在这里插入图片描述

小结:

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

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

也可以简化成一行:

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

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

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农阿伟啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值