1. 程式人生 > >scala之集合上常見的函式式風格

scala之集合上常見的函式式風格

"過濾"相關的操作:


flter:

設定一個判定結果為布林型的過濾條件,應用到集合的每一個元素上,返回的是集合裡所有滿足條件的元素構成的一個子集。

partition:

filter型別操作的一個變種,同樣是設定一個判定結果為布林型的過濾條件,應用到集合的每一個元素上,返回的是第二個元素的Tuple,第一個元素是所有滿足條件的元素構成的一個集合,第二個元素是所有不滿足條件的元素構成的一個集合。

find:

filter型別操作的一個變種,同樣是設定一個判定結果為布林型的過濾條件,返回集合中滿足條件的一個元素。

takeWhile:

filter型別操作的一個變種,同樣是設定一個判定結果為布林型的過濾條件,從集合的第一個元素開始,逐一判定元素是否符合條件,在遇到第一個不符合條件的元素後隨即結束過濾,返回的結果就是集合中前N個連續滿足條件的元素。

"對映"相關的操作:


map:

設定一個針對元素的"轉換"操作,應用到集合的每一個元素上,返回的結果是每個元素被轉換之後的新值組成的新集合。新的集合與舊集合大小一樣,但元素都是更新的,甚至型別也會發生變化。

flatMap:

對於巢狀的集合(即集合中的元素還是集合),如果我們希望把每一個巢狀的子集"轉換"成一個新的子集,這時候就應該使用flatMap。

flatMap,不單單應用於集合,它代表著一種很普遍的操作:對於某種巢狀的資料結構,如果它的某個操作會把它的巢狀元素轉化或產生出新巢狀元素,則最終產生的將是一個"二維"的資料結構,也就是巢狀元素本身也是一個巢狀元素,這通常會讓這個產出的結果很不好用,一個必備的工作就是把這個"二維"的資料結構"壓平",重新拼接成一個一維的結構,這正是flatMap要做的事情。所以除了集合,Future也有這個方法,它就是在你使用map去轉換它的underlying時返回的又恰巧是一個Future,那麼這時你可以使用flatMap進行扁平化處理,得到的還是一個Future,而不是Future巢狀著Future。

"扁平化"相關的操作:

flatten:

在函數語言程式設計裡經常會出現巢狀的集合,我們需要頻繁地把這種巢狀的結構"壓"成"扁平"的單一集合,這個動作在函數語言程式設計裡叫"flatten"。即:將所有巢狀的結合的元素一一取出逐一放置到一個集合中。

"摺疊"相關的操作

reduceLeft:

如果我們把集合看成是一張紙條,每一小段代表一個元素,那麼reduceLeft就將這張紙條從左向右"摺疊",最前面的兩個元素會首先"重疊"在一起,這時會使用傳給reduceLeft的引數函式進行計算,返回的結果就像是已經摺疊在一起的兩段紙條,它們已經是一個疊加的狀態了,所以它,也就是上次重疊的結果會繼續做為一個單一的值和下一個元素繼續"疊加",直到摺疊到集合的最後一個元素。

reduceRight:

同理,reduceRight就將這張紙條從右向左"摺疊"。要留心reduceRight的地方是:它的操作方向是從右向左,但是引數的順序卻不是,而是依然第一引數是左邊的元素,第二引數是右邊的元素。

foldLeft:

與reduceLeft極為相似,只是它開始操作的第一個元素是以引數的形式傳入的,而不是集合的第一個元素。

flodRight:

與reduceRight極為相似,只是它開始操作的第一個元素是以引數的形式 傳入的,而不是集合的最後一個元素。