java編程入門學習:函數式編程思維:過濾函數的同義異名問題

Java是一種可以撰寫跨平臺應用軟件的面向對象的程序設計語言。Java 技術具有卓越的通用性、高效性、平臺移植性和安全性,廣泛應用于PC、數據中心、游戲控制臺、科學超級計算機、移動電話和互聯網,同時擁有全球最大的開發者專業社群。

給你學習路線:html-css-js-jq-javase-數據庫-jsp-servlet-Struts2-hibernate-mybatis-spring4-springmvc-ssh-ssm

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

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

不過繼承函數式傳統的語言喜歡按照范式術語來命名基本函數,而出自腳本語言背景的則更喜歡使用描述性的名字(有時候還會起多個名字,實質是指向相同函數的別名)。

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

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

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

小編推薦一個學Java的學習裙【 七六零,二五零,五四一 】,無論你是大牛還是小白,是想轉行還是想入行都可以來了解一起進步一起學習!裙內有開發工具,很多干貨和技術資料分享!

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

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

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

返回結果是由原集合的內容劃分而成的兩個集合,原集合本身保持不變。劃分的依據是用戶傳進來作為篩選條件的高階函數。

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

filter()函數返回所有匹配元素的集合,而find()只返回第一個匹配項:

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

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

根據一個傳入的斷言來決定元素去留的。

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

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

從集合頭部開始,一直丟棄滿足斷言的元素,直到遇到第一個非匹配項:

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

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

按照函數式語言的傳統一般叫作filter()的函數,對應的是Groovy的findAll()方法:

小編推薦一個學Java的學習裙【 七六零,二五零,五四一 】,無論你是大牛還是小白,是想轉行還是想入行都可以來了解一起進步一起學習!裙內有開發工具,很多干貨和技術資料分享!

這個方法也像Scala的篩選函數一樣,適用于所有的類型,包括字符串:

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

Groovy也有跟partition()對應的函數,叫作split():

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

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

Groovy的find()方法返回集合中的第一個匹配項:

當find()找不到匹配項的時候,Groovy沒有采用Scala防范空值的做法,而是按照Java的習慣直接返回null。

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

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

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

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

Clojure用于操縱集合的招式數量多得驚人,而且Clojure語言的動態類型特征,這些函數一般還都是泛型的函數。

Clojure在命名上沿襲函數式編程的傳統。

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

小編推薦一個學Java的學習裙【 七六零,二五零,五四一 】,無論你是大牛還是小白,是想轉行還是想入行都可以來了解一起進步一起學習!裙內有開發工具,很多干貨和技術資料分享!

Clojure的函數也像另外兩種語言一樣,適用于各種類型,包括字符串:

Clojure給(filter )設定的返回值類型是Seq。Seq接口是Clojure用于表示序列型集合的核心抽象,用一對圓括號括起來的就是一個Seq。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容