



下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、 論函數(shù)式編程在java程序中的應用 連潔摘要:函數(shù)式編程已經(jīng)成為當前最流行的編程模式之一,根據(jù)java8最新標準,介紹了lambda表達式對函數(shù)式編程的支持,并探討了stream類在應用開發(fā)中的使用方式,對lambda表達式的應用模式進行了探討。關鍵詞:函數(shù)式;java程序;應用:tp311 :a :1009-3044(2015)06-0099-02函數(shù)式編程(functional programming)作為當前最流行的編程規(guī)范之一,主流語言都對其進行了支持,作為編程領域最重要的java語言,也在最新的jdk8中新增了相關特性,這就是la
2、mbda()表達式及stream類。它使得java語言進一步與當今流行趨勢結合,增強了java語言的表現(xiàn)力,拓展了它的應用范圍,優(yōu)化了程序的結構與可讀性1 函數(shù)式編程簡介函數(shù)式編程(functional programming)是一種編程模式,旨在將運算過程盡量寫成一系列嵌套的函數(shù)調(diào)用。在形式上,函數(shù)式編程允許將函數(shù)作為參數(shù)和返回值;在機制上,函數(shù)式編程在執(zhí)行時進行惰性計算(lazy evaluation)和閉包等技術。最主要的優(yōu)點是不修改狀態(tài),可以將任務隨意分解,很好的符合了當前多線程、多處理器編程的趨勢。2 java中的lambda表達式lambda()表達式是jdk8最大的更新之一,旨在
3、引入函數(shù)式編程思想優(yōu)化java程序。其表達形式如下:(int even, int odd) -> even + odd在jdk8 中,使用->符號引起表達式,該符號左邊為表達式的參數(shù),右邊為表達式的行為。lambda表達式可使用在多種場合,例如作為參數(shù)直接傳入某個函數(shù):button.addactionlistemer(event->system.out.println(“button clicked!”);其中button是一個awt button 對象,由此我們可以看出,在傳統(tǒng)的需要匿名內(nèi)部類的地方可由lambda表達式代替,另外,傳統(tǒng)的函數(shù)參數(shù)需要一個對象,而引入了lam
4、bda表達式之后,則可以將函數(shù)作為參數(shù)傳入,從而在代碼上更加簡潔。引入lambda表達式的優(yōu)點首先體現(xiàn)著對代碼的重構上,傳統(tǒng)的java程序有一個重要的概念即匿名內(nèi)部類,這個類在某些只使用一次即銷毀的情況下創(chuàng)建,例如常見的為按鈕添加事件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類可以提高程序特別是循環(huán)結構的執(zhí)行效率,在jdk8之前,傳統(tǒng)的循環(huán)結構采用的都是外循環(huán)結構,例如試圖取得所有來自北京的教師int count = 0;for (teacher teacher : allteachers) if (teacher.isfrom("london") c
6、ount+;可以看到,傳統(tǒng)方式中,集合內(nèi)部的數(shù)據(jù)與外部的循環(huán)語句不停的進行交換,外部程序不得不占用一部分空間為結果集做準備,從時間上到空間上都造成了浪費。而經(jīng)過lambda表達式和stream改造,原有的外部循環(huán)成為內(nèi)部循環(huán),如下例所示:long count = allartists.stream().filter(artist -> artist.isfrom("london").count();可以看出,使用lambda表達式后,內(nèi)部循環(huán)只是在符合條件的集合個體中做出標識,不占用額外內(nèi)存,當程序不發(fā)出最后的指令(如要求立即返回結果)時,內(nèi)部循環(huán)不作出任何操作,稱為
7、lazy模式,這樣就節(jié)省了時間。3 用lambda表達式優(yōu)化程序初學者在使用lambda表達式時,可將其應用在集合操作中,優(yōu)化其操作方式,lambda表達式與stream類所支持的集合優(yōu)化有map、filter、flatmap以及reduce等,下面將詳細介紹這幾種方式。在這之前,首先定義一個領域模型,模仿現(xiàn)實世界中的某些業(yè)務需求,這個領域模型的結構如下作者author,包含名稱(string name)、所屬機構(string origine)和若干成員(string members )著作 book,包含名稱(string name),若干章節(jié)(list chapters)和若干作者(li
8、st authors)章節(jié)chapter,包含章節(jié)名稱(string name)和字數(shù)(int chars)作者集合authors,著作集合books和章節(jié)集合chapters。首先來介紹stream類中的第一種操作,即map操作,該操作負責將集合當中的元素進行符合條件的轉換。例如,需要所有作者的所屬機構列表,則使用lambda表達式和stream代碼如下:list origines=authors.stream().map(author->author. getorigine().collect(tolist();第二種常用操作是filter操作,旨在篩選出集合當中符合條件的元素,例如
9、,需要找到所有成員數(shù)為1的作者(即該作者不是團隊而是個人),代碼如下authors.stream().filter(author->author.getmembers().length<2);最后一種常用操作為reduce,該操作類似于數(shù)據(jù)庫中的聚合函數(shù),可對結果進行各種統(tǒng)計,如匯總、小計、總計等,例如要求計算所有所有作者全部著作的總字數(shù),則代碼可以如下:chapters.stream().map(chapter->chapter.getchars().reduce(0,(base,acc)->base+acc);以上介紹了函數(shù)式編程在java中的簡單應用,作為java8中最重要的新特性,函數(shù)式編程極大的簡化了代碼的編寫,使得java這一語言煥發(fā)了新的生命力,在未來的開發(fā)中,擁有面向對象及面向函數(shù)雙重特征的java語言必定會發(fā)揮更大的作用。參考文獻:1 張迎周, 張衛(wèi)豐. haskell:一種現(xiàn)代純函數(shù)式語言j.南京郵電大學學報:自然科學版,2007(4).2 龐建民, 趙
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 卡車舊車出售合同范本
- 單位用工中止合同范本
- 商鋪裝飾裝修合同范本
- 合肥房屋租賃合同范例
- 廈門創(chuàng)業(yè)合伙合同范本
- 商超肉類供貨合同范本
- 勞動合同范本 模板
- 合同范本編制目
- 土地流轉施工合同范本
- 園林公司施工假山合同范例
- GB/T 7939.1-2024液壓傳動連接試驗方法第1部分:管接頭
- 《藥品上市許可持有人檢查要點》試題及答案
- 2016-2023年江蘇城市職業(yè)學院高職單招(英語/數(shù)學/語文)筆試歷年參考題庫含答案解析
- 加強物料提升機施工現(xiàn)場安全管理
- 第15課《我是記憶小能手》課件
- 重癥肺炎護理查房文獻參考
- 小紅書經(jīng)典營銷案例分析
- 企業(yè)戰(zhàn)略與績效管理
- 虛擬貨幣交易合同
- 操作系統(tǒng)課程設計報告
- 檔案袋密封條格式范本(可直接打印,可自行編輯)
評論
0/150
提交評論