JDK8新特性詳細(xì)介紹_第1頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、jdk8新特性詳細(xì)介紹函數(shù)式編程面對(duì)對(duì)象強(qiáng)調(diào)一切皆對(duì)象,假如想要做事情,必需要找到對(duì)象來做。函數(shù)式編程思想強(qiáng)調(diào)做什么,而不是怎么做。一般的開啟線程/匿名內(nèi)部類對(duì)象runnabletask=newrunnable()overridepublicvoidrun()system.out.println("烏鴉坐飛機(jī)");newthread(task).start();更多java相關(guān)免費(fèi)視頻教程:java在線教程函數(shù)式編程開啟線程newthread()-system.out.println("龍卷風(fēng)摧毀停車場").start();前面的小括號(hào):辦法參數(shù),沒有參

2、數(shù)時(shí)就寫(),箭頭指向后面要做的事情,箭頭后面就好比是辦法體大括號(hào),代表詳細(xì)要做的內(nèi)容。lambda表達(dá)式lambda表達(dá)式,也可稱為閉包,它是推進(jìn)java8發(fā)布的最重要新特性。lambda允許把函數(shù)作為一個(gè)辦法的參數(shù)(函數(shù)作為參數(shù)傳遞進(jìn)辦法中)。用法lambda表達(dá)式可以使代碼變的越發(fā)簡潔緊湊。三要素:參數(shù)、箭頭、代碼格式:(參數(shù)類型參數(shù)名稱)-一些代碼用法lambda表達(dá)式的前提:必需要有接口并且接口中有且惟獨(dú)一個(gè)抽象辦法演示:編寫一個(gè)cook接口,接口中有一個(gè)makefood()辦法publicstaticvoidmain(stringargs)method()-system.out.p

3、rintln("閃刀啟動(dòng)!"););privatestaticvoidmethod(cookcook)cook.makefood();lambda表達(dá)式省略規(guī)章:參數(shù)類型可以省略。但是只能同時(shí)省略全部參數(shù)的類型,或者索性都不省略假如參數(shù)有且僅有一個(gè),那么小括號(hào)可以省略假如大括號(hào)內(nèi)的語句有且僅有一個(gè),那么無論有沒有返回值,return、大括號(hào)、分號(hào)都可以省略。publicstaticvoidmain(stringargs)method(a,b)-a+b);privatestaticvoidmethod(calculatorcalculator)intresult=calcul

4、ator.sum(1234,9876);system.out.println(result);在new一個(gè)接口時(shí),也可以用法lambda表達(dá)式來代替匿名內(nèi)部類runnabletask=()-system.out.println("閃刀啟動(dòng)!");newthread(task).start();函數(shù)式接口接口當(dāng)中有且僅有一個(gè)抽象辦法,叫做函數(shù)式接口。jdk8中新增了注解functionalinterface,用于檢測一個(gè)接口是否為函數(shù)式接口。假如不是函數(shù)式接口,編譯時(shí)會(huì)報(bào)錯(cuò)。functionalinerface注解是可選的,就算不用這個(gè)注解,只要保證接口滿足函數(shù)式接口的定義要

5、求,也一樣是函數(shù)式接口。functionalinterfacepublicinterfacemyinterfacevoidmethod();辦法引用printerprinter=(str)-system.out.println(str);這段代碼事實(shí)上可以簡寫。只要是可推導(dǎo)的,就是可引用的,因此傳參其實(shí)并沒故意義,因此這里其實(shí)可以用法辦法引用來簡寫system.out:println從java8開頭,引入了一個(gè)全新的運(yùn)算符,辦法引用符(兩個(gè)冒號(hào)連著寫),所在的表達(dá)式就是一個(gè)辦法引用,辦法引用和lambda本質(zhì)是徹低一樣的,目的就是簡化lambda表達(dá)式的寫法。lambda的寫法:s-syste

6、m.out.println(s)辦法引用寫法:system.out:println兩種寫發(fā)徹低等效publicstaticvoidmain(stringargs)method(system.out:println);privatestaticvoidmethod(printerprinter)printer.print("hello");接口default辦法接口原來是兩個(gè)抽象辦法,現(xiàn)在需要變成三個(gè)抽象辦法,這個(gè)時(shí)候它的實(shí)現(xiàn)類也需要實(shí)現(xiàn)新的辦法。當(dāng)實(shí)現(xiàn)類太多時(shí),操作起來很棘手,jdk之前是用法開閉設(shè)計(jì)模式:對(duì)擴(kuò)綻開放,對(duì)修改關(guān)閉。即:創(chuàng)建一個(gè)新的接口,繼承原有的接口,定義新

7、的辦法,但是這樣的話,原本的那些實(shí)現(xiàn)類并沒有新的辦法,這時(shí)候可以用法接口默認(rèn)辦法。關(guān)鍵字用法default舉行修飾,辦法需要辦法體。這樣的辦法全部的子類會(huì)默認(rèn)實(shí)現(xiàn)(不用自己寫),假如想要籠罩重寫,也可以在實(shí)現(xiàn)類中籠罩重寫/*從java8開頭,接口當(dāng)中允許定義default默認(rèn)辦法*修飾符:publicdefault(public可以省略,default不能省略)*/publicinterfacemyinterfacevoidmethod1();voidmethod2();defaultvoidmethodnew()system.out.println("接口默認(rèn)辦法執(zhí)行")

8、;注重:接口中的default辦法相當(dāng)于是一個(gè)新的關(guān)鍵字,和四種修飾符的default并非一個(gè)概念?;钣胐efault關(guān)鍵字,可以使程序達(dá)到多繼承的效果。static辦法從java8開頭,接口當(dāng)中允許定義靜態(tài)辦法,使用與普通類的靜態(tài)辦法相同。publicinterfaceanimalvoideat();staticanimalgetanimal()returnnewcat();流式操作流式處理給開發(fā)者的第一感覺就是讓集合操作變得簡潔了許多,通常我們需要多行代碼才干完成的操作,借助于流式處理可以在一行中實(shí)現(xiàn)。比如我們希翼對(duì)一個(gè)包含整數(shù)的集合中篩選出全部的偶數(shù),并將其封裝成為一個(gè)新的list返回,

9、那么在java8之前,我們需要通過如下代碼實(shí)現(xiàn):對(duì)于一個(gè)nums的集合:listevens=newarraylist();for(finalintegernum:nums)if(num%2=0)evens.add(num);通過java8的流式處理,我們可以將代碼簡化為:listevens=nums.stream().filter(num-num%2=0).collect(collectors.tolist();先容易說明一下上面這行語句的含義,stream()操作將集合轉(zhuǎn)換成一個(gè)流,filter()執(zhí)行我們自定義的篩選處理,這里是通過lambda表達(dá)式篩選出全部偶數(shù),最后我們通過collec

10、t()對(duì)結(jié)果舉行封裝處理,并通過collectors.tolist()指定其封裝成為一個(gè)list集合返回。常用操作案例:/初始化list集合listlist=newarraylist();list.add("測試數(shù)據(jù)1");list.add("測試數(shù)據(jù)2");list.add("測試數(shù)據(jù)3");list.add("測試數(shù)據(jù)12");/用法λ表達(dá)式遍歷集合list.foreach(s-system.out.println(s);/結(jié)合predicate用法和過濾條件篩選元素predicatecontai

11、n1=n-n.contains("1");predicatecontain2=n-n.contains("2");/按照條件遍歷集合list.stream().filter(contain1).foreach(n-system.out.println(n);list.stream().filter(s-contain1.test(s).foreach(s-system.out.println(s);list.stream().filter(contain1.and(contain2).foreach(n-system.out.println(n);list.stream().filter(contain1.or(contain2).foreach(n-system.out.println(n);/將過濾后的元素重新放到一個(gè)集合中l(wèi)istnewlist=list.stream().filter(contain1.and(contain2).collect(collectors.tolist();集合中decimal求和bigdecimalsum=list.stream().map(person:get

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論