Lambda表达式

Lambda表达式

函数式编程思想:lamlbda(jdk8新特性)
  • 在数学中,函数是有输入量,输出量的一套计算方案,相对而言面向对象过分强调“必须通过对象的形式来做事情”,而函数式编程则是尽量忽略面向对象的复杂语法–强调做什么,而不是以什么形式做

  • 面向对象思想:

    找一个对象,调用对象的方法来完成事情

  • 函数式编程思想:

    只要能获取到结果,谁去做都可以,怎么做不重要,只在意结果

  • 举个例子:当我们创建线程的时候,用已知的方法,最简便的创建方法就是使用匿名内部类,而我们只要重写的run方法,而不是创建的那个匿名内部类

lambda表达式与匿名内部类区别:
  • lambda因为不用创建class字节码文件,所以效率高于匿名内部类
使用匿名内部类创建一个线程:
	new Thread() {
        @Override
        public void run() {
            
        }
    }.start();
使用lambda创建一个线程:
	new Thread(() -> {

    }).start();

ps:可以看出,使用lambda代码更加的简洁

lambda详解:
  • ():即run方法的参数,可以传也可以不传

  • ->:代表前面的参数传递给后面的方法体,传递的意思

  • {}:里面放重写的run方法中的业务逻辑代码

  • 标准格式:

    (参数列表) -> {重写的方法中的代码}

    ps:lambda也可以有返回值

Lambda使用时的注意事项:
  • 使用Lambda必须要有接口,并且接口中有且只有一个抽象方法

  • 使用Lambda必须有上下文推断,也就是方法的参数或者局部变量类型必须为Lambda对应接口的类型

    ps:仅有一个抽象方法的接口,称为“函数式接口”

lambda的省略方式:
  • 参数列表中的参数可以省略参数类型

  • 代码块的{}可以省略,但只限于只有一条语句

  • return可以省略,直接一条语句返回一个值即可

  • 分号可以省略

  • 参数列表中只有一个参数可以省略括号

    ps:2、3、4条需要省略一个就一定要全部都省略

lambda的延迟执行:
  • 有些场景的代码执行后,结果不一定会被使用,从而造成性能浪费。而lambda是延迟执行的,所以正好可以作为解决方案,用于提升性能
如何延迟执行?
  • 答:使用lambda表达式时,必须有一个函数式接口(只有一个抽象方法的接口),我们使用lambda表达式时,只要不调用这个接口中的抽象方法,那么lambda表达式中的业务逻辑代码就不会执行
举个例子:
  • 不使用lambda:

    一个方法中传入一个拼接的字符串,无论这个方法适不适用这个字符串,它都会有拼接的过程,如果判断条件不符合,不使用这个字符串的话,那么就造成了资源浪费

  • 使用lambda:

    让那个方法传的参数是一个函数式接口,我们在调用这个方法的时候,使用lambda表达式进行传参,这样在方法中只要因为某些原因不调用这个接口的方法,那么lambda表达式中传入的业务逻辑代码就不会被执行,这样就达到了提升性能的目的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值