8.0、Java多线程——Lambda表达式

8.0、Java多线程——Lambda表达式

Lambda表达式:

        λ希腊字母表中排序第是一位的字母,英文名称为Lambda

        避免匿名内部类定义过多

        其实质属于函数式编程的概念

我们学习Lambda表达式之前,

先来了解一下什么是 函数式接口:

        理解Functional Interface(函数式接口)是学习 Java8 lambda表达式的关键所在。

        函数式接口的定义:

                任何接口,如果质保函唯一一个抽象方法,那么他就是一个函数式接口,如下所示:

public interface Runnable {

    public abstract void run();

}

                对于函数式接口,我们可以通过Lambda表达式来创建该接口的对象。

我们先来看看以前是怎么写的,代码如下:

package com.hkl.demo02;

public class TestLambda1 {

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

}

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

//实现类
class Like implements ILike {

    public void lambda() {
        System.out.println("I like lambda~");
    }
}


就是先定义一个接口然后创建一个实现类去实现这个接口,然后调用接口 

接下里看看我们如何一步步推导得到最后简洁的 Lambda 表达式

 第一步:将实现类变成静态内部类,代码如下所示

package com.hkl.demo02;

public class TestLambda1 {
    //静态内部类
    static class Like implements ILike {
        public void lambda() {
            System.out.println("I like lambda~");
        }
    }

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

}

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

第二步:将 静态内部类 变成 局部内部类,代码如下

package com.hkl.demo02;

public class TestLambda1 {

    public static void main(String[] args) {
        class Like implements ILike {
            public void lambda() {
                System.out.println("I like lambda~");
            }
        }
        Like like = new Like();
        like.lambda();
    }

}

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

第三步:将 局部内部类 变成 匿名内部类,匿名内部类没有类的名称,必须借助接口或者父类

package com.hkl.demo02;

public class TestLambda1 {

    public static void main(String[] args) {
        ILike like = new ILike() {

            public void lambda() {
                System.out.println("i like lambda~");
            }
        };
        like.lambda();
    }

}

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

第四步:接下来我们用 lambda 表达式去简化我们的匿名内部类,由于函数接口只有一个方法所以,直接把接口 和 方法名去掉了只保留了方法体,代码如下所示

ILike like = ()->{
    System.out.println("i like lambda5~");
};

如果是有参数的情况下还可以继续简化,代码如下所示:

ILike like = (int a)->{
    System.out.println("i like lambda5~");
};

//可以将参数类型省略,代码如下:
ILike like = (a)->{
    System.out.println("i like lambda5~");
};

//可以将括号也省略掉,代码如下:
ILike like = a->{
    System.out.println("i like lambda5~");
};

//如果方法体中代码只有一行,花括号也可以省略,代码如下:
ILike like = a-> System.out.println("i like lambda5~");

有多个参数简化时,必须加上括号 而且 参数类型要么都省略掉类型要么都加上

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值