Java8 Lambda表达式.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Java8 Lambda表达式

怒学Java 8 by bjpengpeng@ 函数式编程 课本上说编程有两种模式,面向过程的编程以及面向对象的编程,其实在面向对象编程之前还出现了面向函数的编程(函数式编程) ,以前一直被忽略、不被重视,现在从学术界已经走向了商业界,对函数编程语言的支持目前有Scala、Erlang、F#、Python、Php、Java、Javascript等,有人说他将会是编程语言中的下一个主流... Lambda表达式 为什么需要Lambda表达式 1.使用Lambda表达式可以使代码变的更加紧凑,例如在Java中实现一个线程,只输出一个字符串Hello World!,我们的代码如下所示: public static void main(String[] args) throws Exception { new Thread(new Runnable() { @Override public void run() { System.out.println(Hello World!); } }).start(); TimeUnit.SECONDS.sleep(1000); } 使用Lambda表达式之后代码变成如下形式: public static void main(String[] args) throws Exception { new Thread(() - System.out.println(Hello World!)).start(); TimeUnit.SECONDS.sleep(1000); } 是不是代码变的更紧凑了~,其他的例如各种监听器,以及事件处理器等都可以用这种方式进行简化。 修改方法的能力,其实说白了,就是函数中可以接受以函数为单元的参数,在C/C++中就是函数指针,在Java中就是Lambda表达式,例如在Java中使用集合类对一个字符串按字典序列进行排序,代码如下所示: public static void main(String[] args) { String []datas = new String[] {peng,zhao,li}; Arrays.sort(datas); Stream.of(datas).forEach(param - System.out.println(param)); } 在上面代码中用了Arrays里的sort方法,现在我们不需要按字典排序,而是按字符串的长度进行排序,代码如下所示: public static void main(String[] args) { String []datas = new String[] {peng,zhao,li}; Arrays.sort(datas,(v1 , v2) - Ipare(v1.length(), v2.length())); Stream.of(datas).forEach(param - System.out.println(param)); } 是不是很方便,我们不需要实现Comparable接口,使用一个Lambda表达式就可以改变一个函数的形为~ Lambda表式式syntax 1.形式化表示如下所示 Parameters - an expression 2.如果Lambda表达式中要执行多个语句块,需要将多个语句块以{}进行包装,如下所示: Parameters - {expressions;}; 3.如果Lambda表达式不需要参数,可以使用一个空括号表示,如下示例所示 () - {for (int i = 0; i 1000; i++) doSomething();}; Java是一个强类型的语言,因此参数必须要有类型,如果编译器能够推测出Lambda表达式的参数类型,则不需要我们显示的进行指定,如下所示,在Java中推测Lambda表达式的参数类型与推测泛型类型的方法基本类似 String []datas = new String[] {peng,zhao,li}; Arrays.sort(datas,(String v1, String v2) - Ipare(v1.length(), v2.length())); 上述代码中 显示指定了参数类型Stirng,其实不指定,如下代码所示,也是可以的,因为编译器会根据Lambda表达式对应的函数式接口ComparatorString进行自动推断 String []datas = new String[] {peng,zhao,li};; Arrays.sort(datas,(v1, v2) - Ipare(v1.length(), v2.length())); 如果Lambda表达式只有一个参数,并且参数的

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档