java8入門必備——函數(shù)式編程思維——過濾函數(shù)的同義異名問題

函數(shù)的同義異名問題——演示各類函數(shù)式語言中的用法

作為函數(shù)式編程語言的共同特征楚昭,在每一種語言里都可以找到同樣的幾大類基本函數(shù)剂公。

不過繼承函數(shù)式傳統(tǒng)的語言喜歡按照范式術(shù)語來命名基本函數(shù)沫浆,而出自腳本語言背景的則更喜歡使用描述性的名字(有時(shí)候還會(huì)起多個(gè)名字眨攘,實(shí)質(zhì)是指向相同函數(shù)的別名)吮廉。

函數(shù)的同義異名問題——演示各類函數(shù)式語言中的用法——篩選

篩選函數(shù)將用戶(以高階函數(shù)的形式)給定的布爾邏輯作用于集合曲聂,返回由原集合中符合條件的元素組成的一個(gè)子集递惋。篩選操作與查找(find)函數(shù)的關(guān)系很密切柔滔,查找函數(shù)返回的是集合中第一個(gè)符合條件的元素。

函數(shù)的同義異名問題——演示各類函數(shù)式語言中的用法——篩選——Scala——filter

利用Scala的隱式參數(shù)(implicit parrameter)特性可以讓例子變得更簡短:

filter()可以用于任意的集合萍虽。

函數(shù)的同義異名問題——演示各類函數(shù)式語言中的用法——篩選——Scala——partition

返回結(jié)果是由原集合的內(nèi)容劃分而成的兩個(gè)集合睛廊,原集合本身保持不變。劃分的依據(jù)是用戶傳進(jìn)來作為篩選條件的高階函數(shù)杉编。

函數(shù)的同義異名問題——演示各類函數(shù)式語言中的用法——篩選——Scala——find

filter()函數(shù)返回所有匹配元素的集合超全,而find()只返回第一個(gè)匹配項(xiàng):

find()并不直接把匹配項(xiàng)作為返回值咆霜,而是用Option類作了一層包裝。Option有兩個(gè)可能的取值:Some或者None嘶朱。

函數(shù)的同義異名問題——演示各類函數(shù)式語言中的用法——篩選——Scala——takeWhile()

根據(jù)一個(gè)傳入的斷言來決定元素去留的蛾坯。

takeWhile()函數(shù)從集合頭部開始,一直取到第一個(gè)不滿足斷言的元素:

函數(shù)的同義異名問題——演示各類函數(shù)式語言中的用法——篩選——Scala——dropWhile()函數(shù)

從集合頭部開始疏遏,一直丟棄滿足斷言的元素脉课,直到遇到第一個(gè)非匹配項(xiàng):

函數(shù)的同義異名問題——演示各類函數(shù)式語言中的用法——篩選——Groovy——findAll()函數(shù)

Groovy一般不被看作一種函數(shù)式語言,但它具備很多函數(shù)式的范式财异,只是命名上往往帶有腳本語言的色彩倘零。

按照函數(shù)式語言的傳統(tǒng)一般叫作filter()的函數(shù),對(duì)應(yīng)的是Groovy的findAll()方法:

這個(gè)方法也像Scala的篩選函數(shù)一樣宝当,適用于所有的類型视事,包括字符串:

函數(shù)的同義異名問題——演示各類函數(shù)式語言中的用法——篩選——Groovy——split()函數(shù)

Groovy也有跟partition()對(duì)應(yīng)的函數(shù)胆萧,叫作split():

split()方法的返回值是一個(gè)嵌套的數(shù)組庆揩,類似于Scala的partition()函數(shù)返回的嵌套列表。

函數(shù)的同義異名問題——演示各類函數(shù)式語言中的用法——篩選——Groovy——find()函數(shù)

Groovy的find()方法返回集合中的第一個(gè)匹配項(xiàng):

當(dāng)find()找不到匹配項(xiàng)的時(shí)候跌穗,Groovy沒有采用Scala防范空值的做法订晌,而是按照J(rèn)ava的習(xí)慣直接返回null。

函數(shù)的同義異名問題——演示各類函數(shù)式語言中的用法——篩選——Groovy——takeWhile()函數(shù)

函數(shù)的同義異名問題——演示各類函數(shù)式語言中的用法——篩選——Groovy——dropWhile()函數(shù)

和Scala的例子一樣蚌吸,Groovy的dropWhile()也是作為一種特殊的篩選來使用的锈拨。它丟棄滿足斷言的最長前綴,換言之羹唠,被篩選到的只是列表開頭的一部分:

函數(shù)的同義異名問題——演示各類函數(shù)式語言中的用法——篩選——Clojure——(filter )函數(shù)

Clojure用于操縱集合的招式數(shù)量多得驚人奕枢,而且Clojure語言的動(dòng)態(tài)類型特征,這些函數(shù)一般還都是泛型的函數(shù)佩微。

Clojure在命名上沿襲函數(shù)式編程的傳統(tǒng)缝彬。

Clojure和另外兩種語言一樣,提供了針對(duì)簡單匿名函數(shù)的簡寫語法:

Clojure的函數(shù)也像另外兩種語言一樣哺眯,適用于各種類型谷浅,包括字符串:

Clojure給(filter )設(shè)定的返回值類型是Seq。Seq接口是Clojure用于表示序列型集合的核心抽象奶卓,用一對(duì)圓括號(hào)括起來的就是一個(gè)Seq一疯。

Java程序員學(xué)習(xí)交流群481495939,既有技術(shù)大佬夺姑,又有老司機(jī)開車墩邀,各位對(duì)Java感興趣的可以來交流學(xué)習(xí)一下,快樂與技術(shù)一起進(jìn)步盏浙。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末眉睹,一起剝皮案震驚了整個(gè)濱河市留潦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌辣往,老刑警劉巖兔院,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異站削,居然都是意外死亡坊萝,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門许起,熙熙樓的掌柜王于貴愁眉苦臉地迎上來十偶,“玉大人,你說我怎么就攤上這事园细〉牖” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵猛频,是天一觀的道長狮崩。 經(jīng)常有香客問我,道長鹿寻,這世上最難降的妖魔是什么睦柴? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮毡熏,結(jié)果婚禮上坦敌,老公的妹妹穿的比我還像新娘。我一直安慰自己痢法,他們只是感情好狱窘,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著财搁,像睡著了一般蘸炸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上妇拯,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天幻馁,我揣著相機(jī)與錄音,去河邊找鬼越锈。 笑死仗嗦,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的甘凭。 我是一名探鬼主播稀拐,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼丹弱!你這毒婦竟也來了德撬?” 一聲冷哼從身側(cè)響起铲咨,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蜓洪,沒想到半個(gè)月后纤勒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡隆檀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年摇天,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恐仑。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡泉坐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出裳仆,到底是詐尸還是另有隱情腕让,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布歧斟,位于F島的核電站纯丸,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏构捡。R本人自食惡果不足惜液南,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望勾徽。 院中可真熱鬧,春花似錦统扳、人聲如沸喘帚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吹由。三九已至,卻和暖如春朱嘴,著一層夾襖步出監(jiān)牢的瞬間倾鲫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來泰國打工萍嬉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留乌昔,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓壤追,卻偏偏與公主長得像磕道,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子行冰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容