00:00
我们已经了解了集合计算过程当中的简单函数,那大家可能也发现了这些简单函数呢,它们的语义非常的明确,调用也非常的方便,但是缺点就在于提供的这些函数实在是太少了,我们在实际项目当中可能遇到的计算需求是非常复杂的,那如果说提供的这些函数搞不定,那接下来我们该怎么办呢?哎,所以集合当中给我们除了这些简单计算函数之外,还定义了一些高级计算函数,那这些高级计算函数它的抽象层级就要更高,整体来讲对于操作就会更加的一般化,没有那么具体,但是他能做的事情就会更多。那主要包括哪些内容呢?我们来看一下,首先就是过滤,过滤的话,简单来讲就是从一个集合里边,我们把每一个元素都提取出来,然后看看它是否满足一个条件,给定一个条件,哎,这个如果满足条件的话,那就把这个元素保留下来,如果不满足的话,直接剔除掉,过滤掉,所以最终呢,我们相当于可以提取出。
01:13
原来集合的一个某满足某种条件的子集得到一个新的集合。而这这个过程当中,我们会发现啊,我只知道是要做一个过滤操作,那具体的这个条件呢,这里并没有直接指定。所以我们可以在调用的过程当中,自定义一个条件,把它作为参数传进去,完成我们这个集合转换的过程,从原来的集合转换到一个新的集合,那这就是高级计算函数的一个特点啊,它抽象层级比较高,我们可以传入对应的条件,那除了传入一个条件做过滤之外,我们还可以直接做更一般化的集合的转换,或者叫映射。
02:02
这就是传说中的map操作,这个map操作其实非常简单,我们之前在函数高阶应用里边也给大家讲过,就相当于我们把一个集合里边的每一个元素都要做一个转化,这样的话,这个集合就相当于转变成了另外一个集合,它里边的每一个元素对应着一个转化的规则。直接。变到了另外一个集合里边的对应一个元素,哎,所以这个过程,这就相当于是集合直接按照一个函数做了一个转换计算,那这里边的函数也是不确定的,我们可以按照某某个自己定义的规则把这个函数传进去啊,这就是传说中的map操作。另外呢,还有一个扁平化操作,扁平化操作其实这个比较好理解,就是有点像之前我们所说的,把这个两个列表要合并,合并在一起呢,哎,就是里边假如列表里边还套着列表,我们要把它打散,这样的操作就叫做扁平化,就是拆成每一个最小的具体的元素,再合并成同一个集合。
03:10
那除了这些之外,还有扁平化加映射的一个操作,哎,那就相当于是把前面讲到的这个扁平化和映射map合在一起了,相当于是先做一个map转换,然后呢,再把它打散做一个flat,所谓的这个扁平化,我们可以认为这个操作就是二合一的一个操作,后面还有一个操作叫做分组,分组这个操作呢,相对来讲比较特殊,它是按照指定的某个规则,要对集合的元素做一个分组,判断它到底属于哪个组呢?诶,划分过来,所以最后分组操作得到的。它不再是一个,之前我们比方说是一个list,或者是一个set,分组之后它得到的是一个map,因为当前你必须要指定分组的规则,那这一组它的组名是什么呢?哎,这个组名就作为K保存下来,然后对应的元素属于这一组的,所有的元素就保存成一个集合,作为当前K的value。
04:16
这是分组操作,那另外还有就是所谓的规约和折叠,这个其实涉及到的是所有的元素要保持一个状态,然后进行叠加处理,其实这样一个过程啊,那所以像之前我们要做some,要做这个product,要做连加连乘的计算啊,甚至像这个最大化,最小化,它其实都是要保持一个状态,然后把所有的数据做一个规约处理的所有数据,最后规约之后得到一个最简单的结果,哎,这就是我们所说的规约。另外还有一个折叠,折叠是比较底层的一个操作,整体来划分的话,其实我们可以划分成两大类。一大类就是直接做这个集合的转换啊,当然这个分组比较特殊,它是转换成了一个map,但是整体来看的话,这个都不涉及到我们最后把它规约成一个具体计算的结果,哎,所以前面这个我们都可以把它定义成转换操作啊,那在大数据处理里边,我们可以一般都把它叫做map类的一个操作,那像下面的这个规约和折叠呢,它是真正的要把我们所有的数据最后规约成计算成一个值,做一个输出,那所以这就是传说中的reduce,那大家可能都听说过大数据处理当中的map reduce啊啊,其实本质来讲指代的就是这两类操作,接下来我们就在代码里边可以做一个具体的实现。
我来说两句