java8新特性探究(三)解开lambda最强作用的神秘面纱-java开发java经验技巧

java8新特性探究(三)解开lambda最强作用的神秘面纱-java开发java经验技巧

ID:30768446

大小:58.00 KB

页数:5页

时间:2019-01-03

java8新特性探究(三)解开lambda最强作用的神秘面纱-java开发java经验技巧_第1页
java8新特性探究(三)解开lambda最强作用的神秘面纱-java开发java经验技巧_第2页
java8新特性探究(三)解开lambda最强作用的神秘面纱-java开发java经验技巧_第3页
java8新特性探究(三)解开lambda最强作用的神秘面纱-java开发java经验技巧_第4页
java8新特性探究(三)解开lambda最强作用的神秘面纱-java开发java经验技巧_第5页
资源描述:

《java8新特性探究(三)解开lambda最强作用的神秘面纱-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Java8新特性探究(三)解开lambda强作用的神秘面纱-编程开发技术Java8新特性探究(三)解开lambda最强作用的神秘面纱原文出处:成熟的毛毛虫我们期待了很久lambda为java带来闭包的概念,但是如果我们不在集合屮使用它的话,就损失了很大价值。现有接口迁移成为lambda风格的问题已经通过defaultmethods解决了,在这篇文章将深入解析Java集合里面的批量数据操作(bulkoperation),解开lambda最强作用的神秘面纱。1.关于JSR335JSR是JavaSpecificationRequests的缩写,意思是Java规范请求,Java8版木的主要改进是Lam

2、bda项口(JSR335),其口的是使Java更易于为多核处理器编写代码。JSR335=1ambda表达式+接口改进(默认方法)+批量数据操作。加上前面两篇,我们已是完整的学习了JSR335的相关内容了。2.外部VS内部迭代以前Java集合是不能够表达内部迭代的,而只提供了一种外部迭代的方式,也就是for或者while循坏。Listpersons=asList(newPerson("Joe"),newPerson("JinT),newPerson("John〃));for(Personp:persons){p.setLastName(〃Doe〃);}上面的例了是我们以前的做法,也就是所谓的外部

3、迭代,循环是固定的顺序循环。在现在多核的时代,如呆我们想并行循环,不得不修改以上代码。效率能冇多大提升还说定,口会带来一定的风险(线程安全问题等等)。耍描述内部迭代,我们需耍用到Lambda这样的类库,下面利用1ambda和Collection.forEach重写上面的循环persons・forE3ch(p-〉p・sctLastNamc(^Doc^));现在是由jdk库来控制循环了,我们不需要关心lastname是怎么被设置到每一个person对彖里面去的,库可以根据运行环境来决定怎么做,并行,乱序或者懒加载方式。这就是内部迭代,客户端将行为p.setLastName当做数据传入api里面。内

4、部迭代其实和集合的批量操作并没有密切的联系,借助它我们感受到语法表达上的变化。真正有意思的和批量操作相关的是新的流(stream)API。新的java.util,stream包已经添加进JDK8了。3.StreamAPT流(Stream)仅仅代表着数据流,并没有数据结构,所以他遍历完一次之后便再也无法遍历(这点在编程吋候需要注意,不像Collection,遍历多少次里面都还有数据),它的来源可以是Collection、array>io等等。3.1中间与终点方法流作用是捉供了一种操作大数据接口,让数据操作更容易和更快。它具冇过滤、映射以及减少遍历数等方法,这些方法分两种:中间方法和终端方法,“流

5、”抽象天生就该是持续的,屮间方法永远返回的是Stream,因此如果我们要获取最终结果的话,必须使用终点操作才能收集流产生的最终结果。区分这两个方法是看他的返回值,如果是Stream则是中间方法,否则是终点方法。具体请参照Stream的apio简单介绍下儿个中间方法(filter>map)以及终点方法(collect、sum)3.1.IF订ter在数据流中实现过滤功能是首先我们可以想到的最自然的操作了。Stream接口暴露了一个filter方法,它可以接受表示操作的Predicate实现來使用定义了过滤条件的lambda表达式。Listpersons=…Streampersons0verl8二p

6、ersons.stream().filter(p->p.getAge()>18);//过滤18岁以上的人3.1.2Map假使我们现在过滤了一些数据,比如转换对彖的时候。Map操作允许我们执行一个Function的实现(Function的泛型T,R分别表示执行输入和执行结果),它接受入参并返回。首先,让我们来看看怎样以匿名内部类的方式来描述它:Streamadult二persons.strcamO.filter(p->p.getAge()>18).map(newFunction(){©OverridepublicAdultapply(Personperson){returnnewAdu

7、lt(person);//将大于18岁的人转为成年人}});现在,把上述例了转换成使用lambda表达式的写法:Streammap二persons.stream().filter(p->p.getAge()>18).map(person->newAdult(person));3.1.3Countcount方法是一个流的终点方法,可使流的结果最终统计,返回int,比如我们计算一下满足18岁的总人数i

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

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

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