当前位置: 代码迷 >> 综合 >> JavaThread 05 Lambda 表达式
  详细解决方案

JavaThread 05 Lambda 表达式

热度:7   发布时间:2023-11-24 13:51:07.0

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{
    @Overridepublic void lambda(){
    System.out.println("I like lamada2");}}public static void main(String[] args) {
    //向上转换ILike like = new Like();like.lambda();//比较傻逼的 lambda 写法,在新建 对象的时候居然 不直接 写 lambdalike = () -> {
    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{
    @Overridepublic 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 表达式,必须保证 接口的 方法 是一个!如果 超过了一个,哪怕是两个 都用不了!!!

在这里插入图片描述

在这里插入图片描述

  相关解决方案