JAVA lambda表达式

JAVA lambda表达式

ID:41280286

大小:43.34 KB

页数:14页

时间:2019-08-21

JAVA lambda表达式_第1页
JAVA lambda表达式_第2页
JAVA lambda表达式_第3页
JAVA lambda表达式_第4页
JAVA lambda表达式_第5页
资源描述:

《JAVA lambda表达式》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Lambda表达式喻立-Lambda表达式·Lambda表达式·简介·1.什么是λ表达式·2.λ表达式的类型(它是Object吗?)·3.λ表达式的使用o3.1λ表达式用在何处o3.2λ表达式与集合类批处理操作(或者叫块操作)§第一步:传入一系列String(假设都是合法的数字),转成一个List,然后调用stream()方法生成流。§第二步:调用流的map方法把每个元素由String转成Integer,得到一个新的流。§第三步:调用流的filter方法,过滤那些不是素数的数字,并得到一个新流。§第四步:调用流的distinct方法,去掉重复,并得到一个新流。这本质上是

2、另一个filter操作。§第五步:用collect方法将最终结果收集到一个List里面去。o3.3λ表达式的更多用法·4.其它相关概念o4.1捕获(Capture)o4.2方法引用(Methodreference)o4.3默认方法(Defaultmethod)o4.4生成器函数(Generatorfunction)简介Lambda表达式是JavaSE8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。 Lambda表达式还增强

3、了集合库。JavaSE8添加了2个对集合数据进行批量操作的包:java.util.function包以及java.util.stream包。流(stream)就如同迭代器(iterator),但附加了许多额外的功能。总的来说,lambda表达式和stream是自Java语言添加泛型(Generics)和注解(annotation)以来最大的变化。在本文中,我们将从简单到复杂的示例中见认识lambda表达式和stream的强悍。1.什么是λ表达式λ表达式本质上是一个匿名方法。让我们来看下面这个例子:1.publicintadd(intx,inty){2.returnx+y

4、;3.}转成λ表达式后是这个样子:1.(intx,inty)->x+y;参数类型也可以省略,Java编译器会根据上下文推断出来:1.(x,y)->x+y;//返回两数之和或者1.(x,y)->{returnx+y;}//显式指明返回值可见λ表达式有三部分组成:参数列表,箭头(->),以及一个表达式或语句块。 下面这个例子里的λ表达式没有参数,也没有返回值(相当于一个方法接受0个参数,返回void,其实就是Runnable里run方法的一个实现):1.()->{System.out.println("HelloLambda!");}如果只有一个参数且可以被Java推断出类

5、型,那么参数列表的括号也可以省略:1.c->{returnc.size();}2.λ表达式的类型(它是Object吗?)λ表达式可以被当做是一个Object(注意措辞)。λ表达式的类型,叫做“目标类型(targettype)”。λ表达式的目标类型是“函数接口(functionalinterface)”,这是Java8新引入的概念。它的定义是:一个接口,如果只有一个显式声明的抽象方法,那么它就是一个函数接口。一般用@FunctionalInterface标注出来(也可以不标)。举例如下:1.@FunctionalInterface2.publicinterfaceRunn

6、able{voidrun();}3.4.publicinterfaceCallable{Vcall()throwsException;}5.6.publicinterfaceActionListener{voidactionPerformed(ActionEvente);}7.8.publicinterfaceComparator{intcompare(To1,To2);booleanequals(Objectobj);}注意最后这个Comparator接口。它里面声明了两个方法,貌似不符合函数接口的定义,但它的确是函数接口。这是因为equals方法是Obj

7、ect的,所有的接口都会声明Object的public方法——虽然大多是隐式的。所以,Comparator显式的声明了equals不影响它依然是个函数接口。 你可以用一个λ表达式为一个函数接口赋值:1.Runnabler1=()->{System.out.println("HelloLambda!");};然后再赋值给一个Object:1.Objectobj=r1;但却不能这样干:1.Objectobj=()->{System.out.println("HelloLambda!");};//ERROR!Objectisnotafuncti

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。