Java:lambda表达式
2018-07-28 06:12:44来源:博客园 阅读 ()
本文内容:
- lambda表达式的介绍
- lambda表达式的语法
- lambda表达式实现函数式接口
- lambda表达式与Java自带的函数式接口的配合使用
首发日期:2018-07-27
lambda表达式的介绍
- lambda表达式是java8新增的特性
- lambda表达式允许使用更简洁的代码来创建只有一个抽象方法的接口(函数式接口)
lambda表达式的语法:
语法:
- (形参列表) ->{代码块}
- 只有一条语句时,可以省去{}
- 形参为空时,要保留();一个参数时,可以没有括号
- 当接口中定义了返回值时,表达式需要显示指定返回值;当只有一条语句时,会自动返回这条语句的值
- (形参列表) ->表达式
- 由于使用表达式时,是默认返回表达式的值的,所以接口那里需要定义合适的返回值。比如右边的a+b,接口处不能定义成void
lambda表达式与函数式接口:
lambda表达式的目标类型必须是函数式接口。lambda通常用来实现函数式接口。
什么是函数式接口?
1.是一个接口
2.只有一个抽象函数
3.可以有默认函数(如toString等默认函数,大部分是Object中的同名函数)【这里给一个为什么接口会有类似继承自Object的函数的原因:https://blog.csdn.net/xidiancoder/article/details/78011148】
表达式的变量的作用域问题:
- 如果你这样写,你会发现他报错了,说明这里的并不是纯粹的局部变量,它是可以访问外部的。
- 你这样写,会发现是可以运行的。
- 在lambda中无法修改外部变量。
- 在lambda中定义的变量,外部是无法使用的。
lambda表达式实现函数式接口
相信看过上面的内容,你已经了解函数式接口了。下面介绍如果利用lambda表达式实现函数式接口。
普通的实现方法有很多,可以创建一个实名类来实现接口,也可以利用匿名类来实现:
1.创建一个实名类来实现接口
2.利用匿名类来实现
下面用lambda来实现,你会发现lambda确实能节省很多行代码。
---lambda实现->
上面已经演示过:有参数的,没参数的,表达式的,代码块的。下面介绍另一个留心点。
lambda表达式可以说是“任意类型”的,转换成什么取决于“需要什么”。
如上面的,左边是一个接口,那么右边需要一个接口的实现类的对象,于是lambda会去实现这个接口的抽象函数,并创建一个对象返回。
除此之外,还可以放在函数中作为形参,比如:
这个类的函数需要一个接口作为形参。当我们调用函数时,可以传入一个lambda表达式:
lambda表达式与Java自带的函数式接口的配合使用
Java有不少自带的函数式接口,下面只以一个为例。
Comparator是Java中用来排序的一个接口,里面有一个
compare函数。
很多能传入一个排序对象的函数,通常都是传入一个Comparator的实现类。
比如Arrays中的排序函数就可以传入一个Comparator的实现类。
在不用lambda时,可以有:
使用lambda表达式之后:
如你所见,减少了很多代码。所以如果需要传入的对象是一个函数式接口时,不妨考虑使用lambd表达式,这会节省很多代码。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:微服务架构总结
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash