干货:深刻理解Lambda 表达式 (内有文档)

本文深入探讨了Java 8的Lambda表达式,解释了Lambda如何简化代码,通过实例展示了Lambda与匿名内部类的区别,以及如何使用Lambda实现函数式接口。文中还介绍了Java 8的函数式接口包、stream()方法、Method reference等特性,揭示了Lambda与Optional结合处理null的优雅方式。最后,提供了一份详细的Lambda学习资料。
摘要由CSDN通过智能技术生成

前言

Java 8的一个大亮点是引入Lambda表达式,使用它设计的代码会更加简洁。当开发者在编写Lambda表达式时,也会随之被编译成一个函数式接口。下面这个例子就是使用Lambda语法来代替匿名的内部类,代码不仅简洁,而且还可读。

正文

1.什么是Lambda?

“Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)

我们知道,对一个java变量赋值

深刻理解Lambda 表达式

 

但是如果你想把一个代码块赋给一个Java变量,怎么做到呢?

比如,把右边的那块代码,赋给左边的叫做aBlockOfCode的变量:

深刻理解Lambda 表达式

 

这在Java 8之前是做不到的。Java 8问世之后,利用Lambda特性就可以做到了。

深刻理解Lambda 表达式

 

当然这还不算最简洁的写法,为了使代码更简练,我们可以做以下操作,移除没用的声明

深刻理解Lambda 表达式

 

这样,我们成功优雅地把一个代码块赋给了一个变量。而这个代码块,或者说这个被赋给一个变量的函数,就是一个Lambda表达式

但这里仍然存在一个问题,那就是变量aBlockOfCode的类型应该是什么?

在Java 8里面,所有的Lambda的类型都是一个接口,而Lambda表达式本身,也就是那个代码块,需要是这个接口的实现。这是我认为理解Lambda的一个关键点所在,简言之,Lambda表达式本身就是一个接口的实现。这样说可能还是有些困惑,继续举例。

我们给aBlo

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值