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极为相似,只是它开始操作的第一个元素是以参数的形式 传入的,而不是集合的最后一个元素。

猜你喜欢

转载自blog.csdn.net/qq_41204714/article/details/85272144