下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 论函数式编程在java程序中的应用 连洁摘要:函数式编程已经成为当前最流行的编程模式之一,根据java8最新标准,介绍了lambda表达式对函数式编程的支持,并探讨了stream类在应用开发中的使用方式,对lambda表达式的应用模式进行了探讨。关键词:函数式;java程序;应用:tp311 :a :1009-3044(2015)06-0099-02函数式编程(functional programming)作为当前最流行的编程规范之一,主流语言都对其进行了支持,作为编程领域最重要的java语言,也在最新的jdk8中新增了相关特性,这就是la
2、mbda()表达式及stream类。它使得java语言进一步与当今流行趋势结合,增强了java语言的表现力,拓展了它的应用范围,优化了程序的结构与可读性1 函数式编程简介函数式编程(functional programming)是一种编程模式,旨在将运算过程尽量写成一系列嵌套的函数调用。在形式上,函数式编程允许将函数作为参数和返回值;在机制上,函数式编程在执行时进行惰性计算(lazy evaluation)和闭包等技术。最主要的优点是不修改状态,可以将任务随意分解,很好的符合了当前多线程、多处理器编程的趋势。2 java中的lambda表达式lambda()表达式是jdk8最大的更新之一,旨在
3、引入函数式编程思想优化java程序。其表达形式如下:(int even, int odd) -> even + odd在jdk8 中,使用->符号引起表达式,该符号左边为表达式的参数,右边为表达式的行为。lambda表达式可使用在多种场合,例如作为参数直接传入某个函数:button.addactionlistemer(event->system.out.println(“button clicked!”);其中button是一个awt button 对象,由此我们可以看出,在传统的需要匿名内部类的地方可由lambda表达式代替,另外,传统的函数参数需要一个对象,而引入了lam
4、bda表达式之后,则可以将函数作为参数传入,从而在代码上更加简洁。引入lambda表达式的优点首先体现着对代码的重构上,传统的java程序有一个重要的概念即匿名内部类,这个类在某些只使用一次即销毁的情况下创建,例如常见的为按钮添加事件button.addactionlistener(new actionlistener() public void actionperformed(actionevent event) system.out.println("button clicked"););但是该代码当中有若干行是纯粹的样板代码,没有任何实际意义,不仅语法冗长,而且破坏了
5、代码的真实意图,而采用lambda表达式改写后,该段代码的目的一目了然,如下所示button.addactionlistener(event->system.out.println("buttonclicked");其次,lambda表达式配合jdk8新增的的stream类可以提高程序特别是循环结构的执行效率,在jdk8之前,传统的循环结构采用的都是外循环结构,例如试图取得所有来自北京的教师int count = 0;for (teacher teacher : allteachers) if (teacher.isfrom("london") c
6、ount+;可以看到,传统方式中,集合内部的数据与外部的循环语句不停的进行交换,外部程序不得不占用一部分空间为结果集做准备,从时间上到空间上都造成了浪费。而经过lambda表达式和stream改造,原有的外部循环成为内部循环,如下例所示:long count = allartists.stream().filter(artist -> artist.isfrom("london").count();可以看出,使用lambda表达式后,内部循环只是在符合条件的集合个体中做出标识,不占用额外内存,当程序不发出最后的指令(如要求立即返回结果)时,内部循环不作出任何操作,称为
7、lazy模式,这样就节省了时间。3 用lambda表达式优化程序初学者在使用lambda表达式时,可将其应用在集合操作中,优化其操作方式,lambda表达式与stream类所支持的集合优化有map、filter、flatmap以及reduce等,下面将详细介绍这几种方式。在这之前,首先定义一个领域模型,模仿现实世界中的某些业务需求,这个领域模型的结构如下作者author,包含名称(string name)、所属机构(string origine)和若干成员(string members )著作 book,包含名称(string name),若干章节(list chapters)和若干作者(li
8、st authors)章节chapter,包含章节名称(string name)和字数(int chars)作者集合authors,著作集合books和章节集合chapters。首先来介绍stream类中的第一种操作,即map操作,该操作负责将集合当中的元素进行符合条件的转换。例如,需要所有作者的所属机构列表,则使用lambda表达式和stream代码如下:list origines=authors.stream().map(author->author. getorigine().collect(tolist();第二种常用操作是filter操作,旨在筛选出集合当中符合条件的元素,例如
9、,需要找到所有成员数为1的作者(即该作者不是团队而是个人),代码如下authors.stream().filter(author->author.getmembers().length<2);最后一种常用操作为reduce,该操作类似于数据库中的聚合函数,可对结果进行各种统计,如汇总、小计、总计等,例如要求计算所有所有作者全部著作的总字数,则代码可以如下:chapters.stream().map(chapter->chapter.getchars().reduce(0,(base,acc)->base+acc);以上介绍了函数式编程在java中的简单应用,作为java8中最重要的新特性,函数式编程极大的简化了代码的编写,使得java这一语言焕发了新的生命力,在未来的开发中,拥有面向对象及面向函数双重特征的java语言必定会发挥更大的作用。参考文献:1 张迎周, 张卫丰. haskell:一种现代纯函数式语言j.南京邮电大学学报:自然科学版,2007(4).2 庞建民, 赵
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年黔东南客运从业资格证模拟考试题
- 华师大版数学八年级上册 12.1.1 同底数幂的乘法 教案
- 实施初中校园欺凌调查及报告制作
- 学生社团活动执行计划
- 投资项目运营协议三篇
- 河南省周口市程桥小学2023-2024学年五年级(上)月考英语试卷(10月份)
- 幼儿园科学会变的面粉教案
- 2023年数控低速走丝电火花线切割机项目需求分析报告
- 2023年包装材料加工机械项目调研分析报告
- 广东省肇庆联盟校2022年物理高一下期末教学质量检测试题含解析
- 世界精神卫生日知识考试题库(100题)
- 手术室中心吸引突然停止的应急预案
- 10.1不作简单肯定或否定 课件-高中政治统编版选择性必修三逻辑与思维
- 陕西省基本概况
- 健康体检服务方案
- 体育特长生足球专项测试表
- 《UI设计》课程思政示范课程申报书
- 项目一 流体流动基本知识
- GB/T 43781-2024信息技术系统间远程通信和信息交换视联网系统要求
- 建筑设计师的培训与建筑节能设计
- 规划计划书马场
评论
0/150
提交评论