下载此文档

JAVA lambda表达式.doc


文档分类:IT计算机 | 页数:约14页 举报非法文档有奖
1/14
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/14 下载此文档
文档列表 文档介绍
Lambda表达式喻立-(它是Object吗?)(或者叫块操作)第一步:传入一系列String(假设都是合法的数字),转成一个List,然后调用stream()方法生成流。第二步:调用流的map方法把每个元素由String转成Integer,得到一个新的流。第三步:调用流的filter方法,过滤那些不是素数的数字,并得到一个新流。第四步:调用流的distinct方法,去掉重复,并得到一个新流。这本质上是另一个filter操作。第五步:用collect方法将最终结果收集到一个List里面去。(Capture)(Methodreference)(Defaultmethod)(Generatorfunction)简介Lambda表达式是JavaSE8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。 Lambda表达式还增强了集合库。JavaSE8添加了2个对集合数据进行批量操作的包:。流(stream)就如同迭代器(iterator),但附加了许多额外的功能。总的来说,lambda表达式和stream是自Java语言添加泛型(Generics)和注解(annotation)以来最大的变化。在本文中,我们将从简单到复杂的示例中见认识lambda表达式和stream的强悍。。让我们来看下面这个例子:publicintadd(intx,inty){returnx+y;}转成λ表达式后是这个样子:(intx,inty)->x+y;参数类型也可以省略,Java编译器会根据上下文推断出来:(x,y)->x+y;//返回两数之和或者(x,y)->{returnx+y;}//显式指明返回值可见λ表达式有三部分组成:参数列表,箭头(->),以及一个表达式或语句块。 下面这个例子里的λ表达式没有参数,也没有返回值(相当于一个方法接受0个参数,返回void,其实就是Runnable里run方法的一个实现):()->{("HelloLambda!");}如果只有一个参数且可以被Java推断出类型,那么参数列表的括号也可以省略:c->{();}(它是Object吗?)λ表达式可以被当做是一个Object(注意措辞)。λ表达式的类型,叫做“目标类型(targettype)”。λ表达式的目标类型是“函数接口(functionalinterface)”,这是Java8新引入的概念。它的定义是:一个接口,如果只有一个显式声明的抽象方法,那么它就是一个函数接口。一般用***@FunctionalInterface标注出来(也可以不标)。举例如下:***@FunctionalInterfacepublicinterfaceRunnable{voidrun();}publicinterfaceCallable<V>{Vcall()throwsException;}publicinterfaceActionListener{voidactionPerformed(ActionEvente);}parator<T>{pare(To1,To2);booleanequals(Objectobj);}parator接口。它里面声明了两个方法,貌似不符合函数接口的定义,但它的确是函数接口。这是因为equals方法是Object的,所有的接口都会声明Object的public方法——虽然大多是隐式的。parator显式的声明了equals不影响它依然是个函数接口。 你可以用一个λ表达式为一个函数接口赋值:Runnabler1=()->{("HelloLambda!");};然后再赋值给一个Object:Objectobj=r1;但却不能这样干:Objectobj=()->{("HelloLambda!");};//ERROR!Objectisnotafunctionalinterface!必须显式的转型成一个函数接口才可以:Objecto=(Runnable)()->{("hi");};//correct一个λ表

JAVA lambda表达式 来自淘豆网m.daumloan.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数14
  • 收藏数0 收藏
  • 顶次数0
  • 上传人cjc201601
  • 文件大小43 KB
  • 时间2019-08-21