Lambda表达式

Lambda表达式

在之前的多线程学习中我们使用到了lambda表达式来简化代码,现在我们来具体讲一讲它的用法。(我们以往都是通过创建 Thread 对象,然后通过匿名内部类重写 run() 方法,一提到匿名内部类我们就应该想到可以使用 lambda 表达式来简化线程的创建过程。)

Lambda简介

Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的 Java 代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。

JDK 也提供了大量的内置函数式接口供我们使用,使得 Lambda 表达式的运用更加方便、高效。

对接口的要求:虽然使用 Lambda 表达式可以对某些接口进行简单的实现,但并不是所有的接口都可以使用 Lambda 表达式来实现。Lambda 规定接口中只能有一个需要被实现的方法,不是规定接口中只能有一个方法。(jdk 8 中有另一个新特性:default, 被 default 修饰的方法会有默认实现,不是必须被实现的方法,所以不影响 Lambda 表达式的使用。)

@FunctionalInterface

修饰函数式接口的,要求接口中的抽象方法只有一个。 这个注解往往会和 lambda 表达式一起出现。

语法形式

为 () -> {},其中 () 用来描述参数列表,{} 用来描述方法体,-> 为 lambda运算符 ,读作(goes to)。

下面这段代码可以跟着序号逐步观察推导过程,代码的简化(工资按代码量计算真的不合理)

定义一个接口,定义实现类实现接口、静态内部类实现接口、局部内部类实现接口、匿名内部类实现接口、Lambda表达式实现接口,这些方法一步步让代码变简单。

package TreadTest.Lambda;

/*
推导lambda表达式
 */
public class TestLambda {
    //3.静态内部类
    static class Like2 implements ILike
    {
        @Override
        public void lambda() {
            System.out.println("i like lambda2");
        }
    }

    public static void main(String[] args) {
        ILike iLike = new Like();
        iLike.lambda();

        iLike = new Like2();
        iLike.lambda();

        //4.局部内部类
        class Like3 implements ILike
        {
            @Override
            public void lambda() {
                System.out.println("i like lambda3");
            }
        }
        iLike = new Like3();
        iLike.lambda();

        //5.匿名内部类
        iLike = new ILike() {
            @Override
            public void lambda() {
                System.out.println("i like lambda4");
            }
        };
        iLike.lambda();

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

//1。定义一个接口
interface ILike{
    void lambda();
}

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


下面这段代码展示了Lambda表达式的进一步简化规则

package TreadTest.Lambda;

public class TestLambda2 {
    public static void main(String[] args) {

        //1.lambda表示简化
        ILove love = (int a)->{
            System.out.println("I love lambda"+a);
        };
        //简化1.参数类型
         love = (a)->{
            System.out.println("I love lambda"+a);
        };
        //简化2.简化括号
        love = a->{
            System.out.println("I love lambda"+a);
        };
        //简化3.去掉花括号(只有一行代码时才能简化)
        love = a-> System.out.println("I love lambda"+a);

        love.lambda(520);
        //总结:
        //   1.接口是函数式接口,接口里面只有一个方法(runnable接口符合这一点)
        //   2.多个参数也可以去掉参数类型,但要去掉就全去掉,必须加括号
    }
}

//1。定义一个接口
interface ILove{
    void lambda(int a);
}

lambda表达式是代替匿名类简化代码的神器,它也有跟多功能值得我们了解比如引用方法、引用构造方法、在Stream流式编程中的用法等等。下面这篇博客有兴趣可以看看。

学习参考:

https://www.cnblogs.com/haixiang/p/11029639.html

这篇博客讲的更多更详细,值得学习

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值