- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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表达式只有一个参数,并且参数的
您可能关注的文档
- LoadRunner的Oracle计数器.docx
- oracle awr检查报告.doc
- 防范JAVA内存泄漏解决方案.doc
- Oracle从入门到精通复习笔记(一).docx
- 2-2-2内存储器.ppt
- resin4新特性及云计算(环境)支持介绍.ppt
- memcached介绍.ppt
- CLASS_A曲面知识探讨.ppt
- 01.管理Oracle实例.ppt
- AB PLC 数据标签寻址.ppt
- 部编三上语文[1]《秋天的雨》(第二课时)教案教学设计教育教学资料.doc
- 部编五上语文《落花生》(第二课时)课件1教育教学资料.pptx
- 部编四下语文[]《“诺曼底号”遇难记》活动版教案教学设计教育教学资料.docx
- 部编五上语文《语文园地二》课件1教育教学资料.pptx
- 部编五上语文[]《少年中国说》(节选)教案教学设计(合作版)教育教学资料.docx
- 部编五上语文《古诗词三首》教案教学设计2教育教学资料.docx
- 部编六上语文《月光曲》(第一课时)课件教育教学资料.pptx
- 部编三上语文[1]《语文园地四》教案教学设计教育教学资料.doc
- 部编二上语文《葡萄沟》课件3教育教学资料.pptx
- 部编五上语文[]《父爱之舟》教案教学设计(合作版)教育教学资料.docx
文档评论(0)