真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java8和Scala中的高階函數(shù)有哪些

本篇文章為大家展示了Java8和Scala中的高階函數(shù)有哪些,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

在興山等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站建設(shè)、做網(wǎng)站 網(wǎng)站設(shè)計制作定制設(shè)計,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),營銷型網(wǎng)站,外貿(mào)營銷網(wǎng)站建設(shè),興山網(wǎng)站建設(shè)費用合理。

函數(shù)文本最大的優(yōu)勢就是可以像字符串或者對象等其他文本(literal)一樣傳送它。這種特性為構(gòu)建高度緊湊和可重用代碼提供無限的可能性。下面創(chuàng)新互聯(lián)小編來講解下Java8和Scala中的高階函數(shù)有哪些?

Java8和Scala中的高階函數(shù)有哪些

當(dāng)我們將一個函數(shù)文本傳送給一個方法的時候,我們最主要的是一個接收方法參數(shù)的方法(這個確實很繞-_-|||),這類方法就叫做高階函數(shù)。上文Swing例子中提到的addActionListener方法恰好屬于這類。我們還可以定義自己的高階函數(shù)來為自己提供許多便利。讓我們看一個簡單的例子:

defmeasure[T](func:=>T):T{

valstart=System.nanoTime()

valresult=func

valelapsed=System.nanoTime()-start;

print("Theexecutionofthiscalltook:%sns".format(elapsed));

result

}

在這個例子中,我們聲明了一個名為measure的方法用來計算這個名為func的函數(shù)文本的回調(diào)所需要的時間。func方法的簽名(signature)是它不接收任何參數(shù)并且返回一個泛型類型T.正如你所看到的,Scala中的函數(shù)并不一定需要參數(shù)盡管它們能夠——而且往往也含有參數(shù)。

現(xiàn)在我們可以向measure方法中傳遞任何函數(shù)文本(或者方法)。

defmyCallback={

Thread.sleep(1000)

"Ijusttookapoewrnap"

}

valresult=measure(myCallback);

>Theexecutionofthiscalltook:100244900ns

從概念的角度講我們所做的,就是將計算方法調(diào)用時間和實際的運算區(qū)分開來。我們構(gòu)造了兩塊可以重用、松散耦合、類似于攔截器(interceptor)的代碼塊(measure和myCallback)

2、通過高階函數(shù)實現(xiàn)重用

先看一個假設(shè)的例子,兩個可重用構(gòu)造略緊耦合:

defdoWithContact(fileName:String,handle:Contact=>Unit):Unit={

try{

valcontactStr=io.Source.fromFile(fileName).mkString

valcontact=AContactParser.parse(contactStr)

handle(contact)

}

catch{

casee:IOException=>println("couldn'tloadcontactfile:"+e);

casee:ParseException=>println("coulnd'tparsecontactfile:"+e);

}

}

Java8和Scala中的高階函數(shù)有哪些

doWithContact方法從文件中讀取電子名片之類的聯(lián)系方式然后將數(shù)據(jù)提供給一個解析器(parser)將數(shù)據(jù)轉(zhuǎn)化成為聯(lián)系領(lǐng)域的對象。然后這個對象被傳遞給一個函數(shù)文本回調(diào)handle.doWithContact方法很函數(shù)文本均返回Unit類型,等同于java中的返回void的方法。

現(xiàn)在,我們可以定義各種各樣的可以傳遞給doWithContact的回調(diào)函數(shù):

valstoreCallback=(c:Contact)=>ContactDao.save(c)

valsendCallback=(c:Contact)=>{

valmsgBody=AConverter.convert(c)

RestService.send(msgBody)

}

valcombineCallback=(c:Contact)=>{

storeCallback(c)

sendCallback(c)

}

doWithContact("custerX.vcf",storeCallback)

doWithContact("custerY.vcf",sendCallback)

doWithContact("custerZ.vcf",combineCallback)

doWithContact("custerZ.vcf",combineCallback)

回調(diào)函數(shù)也可以通過內(nèi)聯(lián)傳遞:

doWithContact("custerW.vcf",(c:Contact)=>ContactDao.save(c))

3、Java8中的高階函數(shù)

java8中的等效實現(xiàn)看起來十分相似——使用目前的語法建議:

publicinterfaceBlock{

voidapply(Tt);

}

publicvoiddoWithContact(StringfileName,Blockblock){

try{

StringcontacStr=FileUtils.readFileToString(newFile(fileName));

Contact.apply(contact);

block.apply(contact);

}

catch(IOExceptione){

System.out.println("cloudn'tloadcontactfile:"+e.getMessage());

}

catch(ParseExceptione){

System.out.println("cloudn'tparsecontactfile:"+e.getMessage());

}

}

//usage

doWithContact("custerX.vcf",c->ContactDao.save(c))

4、使用高階函數(shù)的益處

正如你見到的,函數(shù)幫助我們干凈地將對象的創(chuàng)建和處理區(qū)分開來。通過這種方法,新的業(yè)務(wù)邏輯處理對象就可以輕易的添加進(jìn)來而沒有必要同對象創(chuàng)建邏輯相耦合。

結(jié)果就是,我們通過使用高階函數(shù)來使我們的代碼保持DRY(Dont'tRepeatYourself)因而,程序員可以從一個非常細(xì)粒度的代碼重用中獲得最佳利益。

上述內(nèi)容就是Java8和Scala中的高階函數(shù)有哪些,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


本文題目:Java8和Scala中的高階函數(shù)有哪些
標(biāo)題網(wǎng)址:http://weahome.cn/article/johiji.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部