JAVA-lambda表达式.docxVIP

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
JAVA-lambda表达式

Lambda表达式喻立-Lambda表达式Lambda表达式简介1. 什么是λ表达式2. λ表达式的类型(它是Object吗?)3. λ表达式的使用3.1 λ表达式用在何处3.2 λ表达式与集合类批处理操作(或者叫块操作)第一步:传入一系列String(假设都是合法的数字),转成一个List,然后调用stream()方法生成流。第二步:调用流的map方法把每个元素由String转成Integer,得到一个新的流。第三步:调用流的filter方法,过滤那些不是素数的数字,并得到一个新流。第四步:调用流的distinct方法,去掉重复,并得到一个新流。这本质上是另一个filter操作。第五步:用collect方法将最终结果收集到一个List里面去。3.3 λ表达式的更多用法4. 其它相关概念4.1 捕获(Capture)4.2 方法引用(Method reference)4.3 默认方法(Default method)4.4 生成器函数(Generator function)简介Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。?Lambda表达式还增强了集合库。 Java SE 8添加了2个对集合数据进行批量操作的包: java.util.function 包以及java.util.stream 包。流(stream)就如同迭代器(iterator),但附加了许多额外的功能。总的来说,lambda表达式和 stream 是自Java语言添加泛型(Generics)和注解(annotation)以来最大的变化。在本文中,我们将从简单到复杂的示例中见认识lambda表达式和stream的强悍。1. 什么是λ表达式λ表达式本质上是一个匿名方法。让我们来看下面这个例子:publicint add(int x,int y){return x + y;}转成λ表达式后是这个样子:(int x,int y)- x + y;参数类型也可以省略,Java编译器会根据上下文推断出来:(x, y)- x + y;//返回两数之和或者(x, y)-{return x + y;}//显式指明返回值可见λ表达式有三部分组成:参数列表,箭头(-),以及一个表达式或语句块。?下面这个例子里的λ表达式没有参数,也没有返回值(相当于一个方法接受0个参数,返回void,其实就是Runnable里run方法的一个实现):()-{System.out.println(Hello Lambda!);}如果只有一个参数且可以被Java推断出类型,那么参数列表的括号也可以省略:c -{return c.size();}2. λ表达式的类型(它是Object吗?)λ表达式可以被当做是一个Object(注意措辞)。λ表达式的类型,叫做“目标类型(target type)”。λ表达式的目标类型是“函数接口(functional interface)”,这是Java8新引入的概念。它的定义是:一个接口,如果只有一个显式声明的抽象方法,那么它就是一个函数接口。一般用@FunctionalInterface标注出来(也可以不标)。举例如下:@FunctionalInterfacepublicinterfaceRunnable{void run();}publicinterfaceCallableV{ V call()throwsException;}publicinterfaceActionListener{void actionPerformed(ActionEvent e);}publicinterfaceComparatorT{int compare(T o1, T o2);boolean equals(Object obj);}注意最后这个Comparator接口。它里面声明了两个方法,貌似不符合函数接口的定义,但它的确是函数接口。这是因为equals方法是Object的,所有的接口都会声明Object的public方法——虽然大多是隐式的。所以,Comparator显式的声明了equals不影响它依然是个函数接口。?你可以用一个λ表达式为一个函数接口赋值:Runnable r1 =()-{System.out.println(Hello Lambda!);};然后再赋值给一个Object:Object obj = r1;但却不能这样干:Object obj =()-{System.out.println(Hello Lambda!);};// ERROR! Object is not a fun

文档评论(0)

zhengshumian + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档