摘要:但是,最好使用差異化的類(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)直接表示方法的值。
Function1.高階函數(shù)strToInt = Integer::parseInt;
能滿足下面任一要求就可以被稱為高階函數(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ù)簽名如下:
Functiondifferentiate(Function func)
其實(shí)二者說(shuō)的是同一件事。
2.科里化科里化的理論定義二、持久化數(shù)據(jù)結(jié)構(gòu)
科里化是一種將具備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)。
應(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
摘要:依舊使用剛剛對(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...
摘要:利用前面所述的方法,這個(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...
摘要:收集器用作高級(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...
摘要:本文是函數(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)講,...
摘要:限制編寫(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ā)...
摘要:如何降低開(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...
閱讀 3574·2023-04-25 14:20
閱讀 1196·2021-09-10 10:51
閱讀 1153·2019-08-30 15:53
閱讀 462·2019-08-30 15:43
閱讀 2316·2019-08-30 14:13
閱讀 2797·2019-08-30 12:45
閱讀 1206·2019-08-29 16:18
閱讀 1165·2019-08-29 16:12