成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

《java 8 實(shí)戰(zhàn)》讀書(shū)筆記 -第十四章 函數(shù)式編程的技巧

nemo / 1832人閱讀

摘要:但是,最好使用差異化的類(lèi)型定義,函數(shù)簽名如下其實(shí)二者說(shuō)的是同一件事。后者的返回值和初始函數(shù)的返回值相同,即。破壞式更新和函數(shù)式更新的比較三的延遲計(jì)算的設(shè)計(jì)者們?cè)趯⒁霑r(shí)采取了比較特殊的方式。四匹配模式語(yǔ)言中暫時(shí)并未提供這一特性,略。

一、無(wú)處不在的函數(shù)

一等函數(shù):能夠像普通變量一樣使用的函數(shù)稱為一等函數(shù)(first-class function)
通過(guò)::操作符,你可以創(chuàng)建一個(gè)方法引用,像使用函數(shù)值一樣使用方法,也能使用Lambda表達(dá)式(比如,(int x) -> x + 1)直接表示方法的值。

Function strToInt = Integer::parseInt;
1.高階函數(shù)

能滿足下面任一要求就可以被稱為高階函數(shù)(higher-order function):

接受至少一個(gè)函數(shù)作為參數(shù)

返回的結(jié)果是一個(gè)函數(shù)

Java 8中,函數(shù)不僅可以作為參數(shù)傳遞,還可以作為結(jié)果返回,能賦值給本地變量,也可以插入到某個(gè)數(shù)據(jù)結(jié)構(gòu)。比如,一個(gè)計(jì)算口袋的程序可能有這樣的一個(gè)Map>。

用不同的方式實(shí)現(xiàn)類(lèi)型定義,如下所示:

Function, Function> 

我們把它定義成Function類(lèi)型(最左邊的Function),目的是想顯式地向你確認(rèn)可以將這個(gè)函數(shù)傳遞給另一個(gè)函數(shù)。但是,最好使用差異化的類(lèi)型定義,函數(shù)簽名如下:

Function differentiate(Function func) 

其實(shí)二者說(shuō)的是同一件事。

2.科里化
科里化的理論定義
科里化是一種將具備2個(gè)參數(shù)(比如,x和y)的函數(shù)f轉(zhuǎn)化為使用一個(gè)參數(shù)的函數(shù)g,并且這個(gè)函數(shù)的返回值也是一個(gè)函數(shù),它會(huì)作為新函數(shù)的一個(gè)參數(shù)。后者的返回值和初始函數(shù)的返回值相同,即
f(x,y) = (g(x))(y)。
ps:通俗點(diǎn),就是把接受多個(gè)參數(shù)的函數(shù)變換成接受一個(gè)單一參數(shù)的函數(shù),并且返回(接受余下參數(shù)而且返回結(jié)果的)新函數(shù)的技術(shù)

當(dāng)然,我們可以由此推出:你可以將一個(gè)使用了6個(gè)參數(shù)的函數(shù)科里化成一個(gè)接受第2、4、6號(hào)參數(shù),并返回一個(gè)接受5號(hào)參數(shù)的函數(shù),這個(gè)函數(shù)又返回一個(gè)接受剩下的第1號(hào)和第3號(hào)參數(shù)的函數(shù)。一個(gè)函數(shù)使用所有參數(shù)僅有部分被傳遞時(shí),通常我們說(shuō)這個(gè)函數(shù)是部分應(yīng)用的(partially applied)。

二、持久化數(shù)據(jù)結(jié)構(gòu)

應(yīng)該注意的第一件事是,函數(shù)式方法不允許修改任何全局?jǐn)?shù)據(jù)結(jié)構(gòu)或者任何作為參數(shù)傳入的參數(shù)。

1.破壞式更新和函數(shù)式更新的比較

三、Stream 的延遲計(jì)算
Java 8的設(shè)計(jì)者們?cè)趯tream引入時(shí)采取了比較特殊的方式。其中一個(gè)比較顯著的局限是,你無(wú)法聲明一個(gè)遞歸的Stream,因?yàn)镾tream僅能使用一次。
主要是利用Supplier,其他略。
四、匹配模式

Java 8語(yǔ)言中暫時(shí)并未提供這一特性,略。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/74563.html

相關(guān)文章

  • Java8實(shí)戰(zhàn)》-讀書(shū)筆記第一章(01)

    摘要:依舊使用剛剛對(duì)蘋(píng)果排序的代碼。現(xiàn)在,要做的是篩選出所有的綠蘋(píng)果,也許你會(huì)這一個(gè)這樣的方法在之前,基本上都是這樣寫(xiě)的,看起來(lái)也沒(méi)什么毛病。但是,現(xiàn)在又要篩選一下重量超過(guò)克的蘋(píng)果。 《Java8實(shí)戰(zhàn)》-讀書(shū)筆記第一章(01) 最近一直想寫(xiě)點(diǎn)什么東西,卻不知該怎么寫(xiě),所以就寫(xiě)寫(xiě)關(guān)于看《Java8實(shí)戰(zhàn)》的筆記吧。 第一章內(nèi)容較多,因此打算分幾篇文章來(lái)寫(xiě)。 為什么要關(guān)心Java8 自1996年J...

    codeGoogle 評(píng)論0 收藏0
  • java 8 實(shí)戰(zhàn)讀書(shū)筆記 -第三章 Lambda表達(dá)

    摘要:利用前面所述的方法,這個(gè)例子可以用方法引用改寫(xiě)成下面的樣子構(gòu)造函數(shù)引用對(duì)于一個(gè)現(xiàn)有構(gòu)造函數(shù),你可以利用它的名稱和關(guān)鍵字來(lái)創(chuàng)建它的一個(gè)引用。 第三章 Lambda表達(dá)式 函數(shù)式接口 函數(shù)式接口就是只定義一個(gè)抽象方法的接口,哪怕有很多默認(rèn)方法,只要接口只定義了一個(gè)抽象方法,它就仍然是一個(gè)函數(shù)式接口。 常用函數(shù)式接口 showImg(https://segmentfault.com/img...

    whinc 評(píng)論0 收藏0
  • Java8實(shí)戰(zhàn)》-第六章讀書(shū)筆記(用流收集數(shù)據(jù)-01)

    摘要:收集器用作高級(jí)歸約剛剛的結(jié)論又引出了優(yōu)秀的函數(shù)式設(shè)計(jì)的另一個(gè)好處更易復(fù)合和重用。更具體地說(shuō),對(duì)流調(diào)用方法將對(duì)流中的元素觸發(fā)一個(gè)歸約操作由來(lái)參數(shù)化。另一個(gè)常見(jiàn)的返回單個(gè)值的歸約操作是對(duì)流中對(duì)象的一個(gè)數(shù)值字段求和。 用流收集數(shù)據(jù) 我們?cè)谇耙徽轮袑W(xué)到,流可以用類(lèi)似于數(shù)據(jù)庫(kù)的操作幫助你處理集合。你可以把Java 8的流看作花哨又懶惰的數(shù)據(jù)集迭代器。它們支持兩種類(lèi)型的操作:中間操作(如 filt...

    EscapedDog 評(píng)論0 收藏0
  • Java 8 函數(shù)編程讀書(shū)筆記——lambda表達(dá)

    摘要:本文是函數(shù)式編程第二章的讀書(shū)筆記。的語(yǔ)法簡(jiǎn)化了使用匿名內(nèi)部類(lèi)時(shí)的模板代碼,讓程序員專(zhuān)注于編寫(xiě)想要執(zhí)行的行為,也讓代碼更加簡(jiǎn)潔易讀。中最重要的函數(shù)接口類(lèi)型推斷為新成員表達(dá)式提供了類(lèi)型推斷的支持,在不需要聲明參數(shù)類(lèi)型的表達(dá)式中表現(xiàn)的有為明顯。 本文是「Java 8 函數(shù)式編程」第二章的讀書(shū)筆記。 Lambda引入的變化 Lambda表達(dá)式,是一種緊湊的、傳遞行為的方式,從編程思想上來(lái)講,...

    lx1036 評(píng)論0 收藏0
  • Java 8 函數(shù)編程讀書(shū)筆記——數(shù)據(jù)并行化

    摘要:限制編寫(xiě)并行流,存在一些與非并行流不一樣的約定。底層框架并行流在底層沿用的框架,遞歸式的分解問(wèn)題,然后每段并行執(zhí)行,最終由合并結(jié)果,返回最后的值。 本書(shū)第六章的讀書(shū)筆記,也是我這個(gè)系列的最后一篇讀書(shū)筆記。后面7、8、9章分別講的測(cè)試、調(diào)試與重構(gòu)、設(shè)計(jì)和架構(gòu)的原則以及使用Lambda表達(dá)式編寫(xiě)并發(fā)程序,因?yàn)楣P記不好整理,就不寫(xiě)了,感興趣的同學(xué)自己買(mǎi)書(shū)來(lái)看吧。 并行化流操作 關(guān)于并行與并發(fā)...

    leone 評(píng)論0 收藏0
  • 《Spring實(shí)戰(zhàn)讀書(shū)筆記——Spring簡(jiǎn)介

    摘要:如何降低開(kāi)發(fā)的復(fù)雜性最小侵入編程通過(guò)面向接口和依賴注入實(shí)現(xiàn)松耦合基于編程慣例和切面進(jìn)行聲明式編程通過(guò)模板減少樣板式代碼容器在應(yīng)用中,不再由對(duì)象自行創(chuàng)建或管理它們之間的依賴關(guān)系容器負(fù)責(zé)創(chuàng)建對(duì)象裝配對(duì)象配置它們并管理它們的整個(gè)生命周期。 歡迎大家關(guān)注我的微信公眾號(hào),一起探討Java相關(guān)技術(shù) showImg(https://segmentfault.com/img/bVboaBO?w=129...

    CKJOKER 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

nemo

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<