JavaThread 05 Lambda 表达式

2.2 Lambda 表达式


在这里插入图片描述

  • λ 希腊字母表中 排名第十一,英文名称为 Lambda
  • 避免匿名内部类定义过多 而诞生的表达式
  • 本质上 属于 函数式编程的思想(Java 居然还引入了 函数式编程思想)

a -> System.out.println(“i like Lambda -->”+a);

new Thread(()->System.out.println(“多线程的学习!”)).start();


2.2.1 为什么要使用 Lambda

  • 避免匿名内部类 定义过多

  • 可以让你的代码看起来很简洁

  • 去掉一堆没有意义的代码,只留下 核心的逻辑。

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


2.2.2 理解Lambda 表达式

  • 理解 functional Interface(函数式接口)是学习 Java 8 lambda 表达式的关键所在。
  • 函数式接口的定义:

任何接口,如果方法唯一一个,那么它 就是 一个 函数式的 接口!

  • 对于函数式接口,我们 通过 lambda 表达式 来创建该 接口的对象并实现该接口的方法。

若想 用 lambda 表达式来 调用该接口,是不需要新建一个对象的(当然你也可以新建)。然后 对象 = ()->{实现的方法内容};这样我们 就能 实现 该 方法了,但是你还是得 调用 该方法。

不过用的最多的方式是:ILike l = () -> {
System.out.println(“hhe”);
};//直接 通过 lambda 表达式 来 新建 这个对象。

lambda 表达式 是为了 简化 匿名内部类 的 书写步骤。而实现匿名内部类。

package www.muquanyu.leeson02;
/**
 * 推导Lambda
 */

public class LambdaDemo {

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

    public static void main(String[] args) {
        //向上转换
        ILike like = new Like();
        like.lambda();

//比较傻逼的 lambda 写法,在新建 对象的时候居然 不直接 写 lambda
        like = () -> {
            System.out.println("我草你大爷");
        } ;

        like.lambda();
//新建 对象的时候,直接 写 lambda,然后 调用 方法即可(非常推荐这样写。)
        ILike l = () -> {
            System.out.println("hhe");
        };
        l.lambda();
    }

}

//1. 首先我们要 定义 一个 函数式接口,什么意思呢,就是 只有 一个 方法
//那不就是 相当于 C/C++ 的 函数嘛。

interface ILike{
    void lambda();
}

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

在这里插入图片描述
可能前面写的笔记没说过!interface 接口 这个东西,实际上 是可以 通过 匿名内部类 和 lambda 表达式 直接 创建 对象的!它 其实 就是 一个 特殊的 abstract 类。可以 有很多子类帮它 写方法。而它的方法 也都是 abstract 的。所以当然 它也可以 创建对象,创建的是 接口的对象。只是 比较费事,所以基本上 没什么人 创建 接口的对象!除非 接口的方法只有一个,那么就会 有人 用 lambda 表达式创建它!!


2.2.3 lambda () 和 {} 是什么 ?

  1. () 是写参数列表的
  2. {} 是方法内部的重写代码
  • 举个例子
interface Love{
    int lambda(int a);
}

 Love love = (int a) ->{
            return a+10;
        };

System.out.println(love.lambda(10));

在这里插入图片描述
而随着 lambda 表达式被大家所认可,而兴起。lambda 表达式 对于 参数() 、{} 甚至还进行了 相应的简化操作。

  • 简化() ①
Love love1 = (a) ->{
            return a+10;
        };

        System.out.println(love1.lambda(20));

在这里,我们 完全 忽略了 提供参数 的 类型,确实呀,我们的这个类型直接就可以找到的呀!在 interface 接口那里已经告诉你 参数类型是什么了。
在这里插入图片描述

  • 简化() ②
Love love2 = a ->{
            return a+10;
        };

System.out.println(love2.lambda(30));

这里的简化,把 括号 () 去掉了。然后 我们 还是可以 正常操作的。在这里插入图片描述

  • 简化{} ①
ILike a = ()->System.out.println("只有一条语句的话,而且不是 return语句就可以简化 {}");
        a.lambda();

只要是一条语句,并且不是 return 语句 就可以这样写。可以把 {} 去掉。但 实用性不太强!

在这里插入图片描述
切记:如果要用 Lambda 表达式,必须保证 接口的 方法 是一个!如果 超过了一个,哪怕是两个 都用不了!!!

在这里插入图片描述

在这里插入图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值