00:00
好,那前面呢,我们通过分析我们传过来的请求参数,我们构建得到了一个检索对象,然后呢,我们通过ES的客户端,我们将这个检索请求我们发出去,最终得到我们ES跟返回的检索结果,那这个检索结果呢,肯定是跟Kan返回的这一块结果一样的,那就是这个结果,那接下来我们就要对照着这个结果来对我们进行一个封装,最终得到我们想要返回给页面的search result数据,那么把这个封装呢,我们专门写在这个方法里边,Build search result,好,我们就在这儿来开始封装,那为了封装简单,期间我们呢,就给这来打一个断点,这个断点里边呢,我们来观察一下我们返回的这个response对象都是什么样的,来挨个封装,那挨个封装呢,首先我们要整体返回一个search result对象,我们把这个search result我们先创建出来,那这个对象里边的封装也分为这么几个部分,我们来看一下第一个部分,那是。
01:01
Result里边我们都来看set方法,第一个呢,首先要set products,这是我们要封装返回的所有查询到的商品,返回的所有查询到的咱们这个商品,好,这是我们要做的第一件事,那第二件事呢,我们还要封装,我们来继续result result点一个set,接下来还有它所有的at t RS,这个呢,就是我们当前所有商品,当前所有商品涉及到的涉及到的所有属性信息,包括我们还要result。点一个set,我要保存这个当前商品的品所涉及的品牌信息,当前商品所涉及的品牌信息,品牌。包括还有它当前商品所涉及的,我们来result,点一个set,还有我们的这个分类,在这是talos好,当前商品所涉及到的所有分类信息,这个是三,这个四所涉及到所有的分类信息,以及我们这个当前商品所涉及到的所有的我们来看一下。
02:18
最后呢,主要就是这个封页信息了,我们前面的这些都做完了,那后边三个参数page number,就是我们当前页码,这是封页信息的页码,封页信息这个呢是页码,包括呢,还有封页信息的我们这个总记录数,点一个set total count,诶这个呢就是总记录数,这是我们分页信息的总记录数,还有我们这的这个总记录数,还有我们来继续result里边有一个叫总页码,我这儿还有一个总页码,所以我们相当于要给页面返回这么几个信息总页码,而这些信息呢,肯定都是在response里边封装着,那我们就要对照response里边的封装结果,我们来做,那我们就来挨个封装,我把这个好我们注意下,然后呢,我们就来打断点,我们从这来开始封装,那我来以debug模式,我们来启动我们将我们的这个东西search,我们以debug模式,我们现在。
03:19
他给这儿来打一个断点,我们给这儿就不打了,直接我们检索完以后将结果传给我们,我们在这儿准备构造对象,构造对象我们看传过来的response是什么东西,包括这个response呢,肯定就是我们检索得到的这个结果,好,我们把这个结果来缩起来,缩起来。那我们所有的分析,那全部都在hits里边的,那hits里边是我们命中的所有记录,把它点开,然后呢,主要在这里边有一个hit,这是我们来命中的记录,包括我们后来还做了聚合查询,比如我们这个下边我们来进行这个检索,在这个语句拼装的时候呢,我们在这儿还做了聚合,把这个检索,我们来用完整的检索好这个hiss里边和aggregations里边,His里边是我们命中的所有记录信息,这个里边呢是聚合信息,而且大家注意,那么后边的这几个商品所涉及到的所有信息,这些呢,都是我们要从聚合信息里边要抽取的,以上诶,以上我们要从聚合信息,聚合信息中我们可以来获取到,而我们这个所有查询到的商品,我们就直接可以在命中的记录里边,这有一个hits hits里边命中了几条记录,那我们这呢,就有几个对象。
04:37
我们主要分析它来就行了,好,我们现在来做一个测试,我们把这一块控制台清空,我们还是用post曼来发送请求send,好,请求一过来,我们断点先来到这儿,我们来看response,那response的完整数据在这一块呢,都有这个接森串,这就跟我们那个是一模一样的。那我们就来看一下这一块串里边的数据怎么分析,我们先来点开response里边有非常多的对象,那么现在主要用它命中的记录,那它这一块呢,就封装了它真正的响应internal里边,其中呢有一个叫hits,这是命中的记录,这还有一个aggggregations,这是我们聚合的结果,所以呢,我们想要获取命中的记录,我们只需要从response里边点一个来看,诶,它有一个方法呢,叫get hits,这是获取我们命中的记录,而命中的记录呢,那就是相当于它获取到了这个hit里边的内容,而这个内容里边来看一个,它里边呢有一个total v6,这是我们的总记录数,所以我们先来看我们的总记录数有没有能得到的,我们在这儿有一个总记录数,好hits,这里边呢有一个叫get,我们发现这有一个叫total case,我们相当于命中的总记录数,总记录数呢,我们只要它的值,那我们把这个总记录数拿到,这是一个浪,我们就叫total。
05:57
我们把这个总计录数拿到,然后呢,我们把总计录数给它保存进来,这是我们的总计录数,那完了以后呢,还有我们的总页码,总页码这就是得我们自己来分析了,我们按照每页大小最终求出总页码好,这个总页码我们得计算得到,那总记录数在这,有了每页大小又是固定的ES constant里边有一个配size,那我们的页码就应该是总记录数,比如有11条,我们让它除以二,它呢得了一个五,还余一个一,如果余一,那就是应该还有第六页,所以我们总页码的计算我们来放在这儿,我就要total pages,我们把先能得到的信息能拿过来,总页码好,我们把这个复制过来,应该等于我们的总记录数在这,然后呢,除以我们的每页大小,我们先看它有没有余数,所以我们在这儿要做一个求余操作,如果它的余数等等。
06:57
零说明没有余数,没有余数呢,那总页码就是它除以它,我们指定的这个每页大小,把这个复制过来,如果有余数的话,那就是它除以它,再加一个一,好我们把这个东西拿过来,有余数那就是后边的那一定要加上括号,好,它除以它,那再来加一个一,这就是我们的总页码,那由于我们这个total呢,它是一个long类型的,所以我们在这得转换一下,好把它强制呢转为int,再来进行计算,把这一块来转成int,包括我们后边的这个,我们也转成int。
07:36
那么相当于在这儿我们转成了我们的总页码,我们就计算出来了,我们可以从hit里边先把这两个得到,那我们的当前页码,我们肯定呢也知道当前页码,那就是请求参数里边传来当前页是多少,那就是多少,那这个参数呢,我们还想用一下,那么就可以给他,让他呢再传过来就行了。好,那我们这个方法呢,除了传response,把我们的请求参数也传过来,我要用一下参数里边的页码,我们可以在这来设置一下,那这个页码呢,来源于参数里边get配置number。
08:11
好,我们这个封页信息这一块的内容,我们就计算得到了,那接下来就是我们的其他的这信息,我们先来看我们查询到的所有商品,我们拿到的这个hits里边,这个hits是我们的总信息,相当于这一块,诶我们拿到的hits,我们还刚才拿到了它的总记录数,然后hits里边呢,还有hits,这才是我们命中的。所有商品记录,那我们就来继续,我们拿到当前的所有商品,我们hits里边点继续有一个get hits,这是我们的所有命中记录,而且我们要进行遍历,我就直接来进行遍历,遍历呢,这就是命中的每一条记录,当然这个遍历的前提呢,那就是不为空,那我们就来判断一下,如果我们命中的这个记录它不等于空,并且呢是有值的,并且它点一个lengths是大于零的,那我们就可以来进行便利封装,那每一个便利我们最终呢,就要给它封装成我们的商品,我来代码整理一下,我们来看我们命中的记录这一块啊,命中的记录我们就来分析,这是每一条命中的记录,那每一条就应该是这里边的东西,而它里边的杠S,这才是我们的真正查到的原本我们存在里边的对象信息,所以我们需要拿到每一条记录里边的杠S就行了。好,我们从hit里边。
09:35
啊,拿过来点一个呢叫杠S,点个杠S,我们来get s,这个S呢有一个安姿string,我们可以将这个命中的记录以字符串的方式我们得到,那得到这个字符串呢,正好它是一个杰森,所以我们转成我们指定要用的数据,我们要用的呢,就是我们当时给里边存的时候。我们保存的是SKU的ES model,所以我们最终呢,就来再转换成这个ES model就行了,那就等于new一个SKU的ES model,那么这个转换呢,我们就可以用杰森工具,我们这个杰森,我们用阿里巴巴fast杰森点一个来让它转成一个对象,那就是将这个字符串转成我们指定的sqs model这个对象啊,让它直接转过来就行了,那这个对象呢,就是我们真正。
10:30
从ES中检索得到的这个对象,而得到的这些对象我们要设置到我们所有查询到的商品里边,所以呢,应该是result,点一个set products在这个里边,那是他们的一个list,那么就把它来封装一个list来进行组装,来写一个list list刚才导错包了,导成这个a wt的,把这一块呢,保证删掉啊,没有,那我们在这来继续。来整成一个list。
11:01
来写一个list Java u,好,它里边呢,封装我们的SQ的ES model,然后呢,这是我们所有的查过来的数据,等于new一个a list,这是我们命中过来的数据,然后呢,每一个只要解析好,我们放到。这个集合里边,好,我们放到这个里边,那放到这个里边呢,最终把它给这一放,这就是我们查询到的所有商品,我们把这个呢就拿到了,那接下来我们再来分析这个商品所涉及到的所有属性,那这些属性呢,全部来源于不是这个hiss里边了,而是这个aggregations里边,在这个里边有我们对catallo的聚合,也有at tr的聚合,还有brand的聚合,那么就先来一个一个分析,我们先来分析catalog agg,那这个catalog agg我们在这里边,Aggregations里边有封装,在这个里边呢,它有三个aggregation,那第一个我们来点开,它呢叫catallo agg,名字呢叫它,那第二个aggregation,它叫at tr agg,第三个呢,它叫brand agg,好,没问题。
12:12
所以呢,我们来获取每一个聚合的信息,那我们就直接从我们查询到的这个结果里边,这是response,我们从这个response里边拿到它的这些聚合信息,聚合信息呢,我们直接有一个get aggregations。这是所有的聚合信息,但是在它里边呢,我们要获取某一个聚合,可以用这个名字来获取到这个聚合,那么这个名字呢,来第一个聚合叫catalog agg,我把这个名字呢复制过来,Copy y6,把这个拿过来,好我们现在呢,要获取第一个叫catalog agg,这个agg呢,最终得了一个aggregation,但这个aggregation我们当时聚合的时候。给他用的是咱们这个terms,我们来看一下,那当时这个aggregation用的catalog,这是一个terms,所以我们呢,就直接把它转成terms aggregation这个可以放心的转过来term。
13:12
4AGGREGATION,我们叫term aggregation,我们发现呢,这一块没有这个类,好我们先来撤销,撤销它这一块呢,返回的是一个aggregation,这肯定是一个接口,来CTRLH,我们来找到这个接口的实现,那我们现在命中的第一个它叫past long term相当于我们这个aggregation,所以我们就在这一块来看,它里边呢,就有一个叫past,我们这个解析了的,而它的类型呢,叫past了我们这个terms,所以我们就来把它转成一个。Past了,我们这个terms,我们就直接将它转过来,我们聚合的是什么,这块类型是什么,我们就可以直接转过来。好,我们把这个转过来以后,我们相当于拿到了我们所有的分类的这个聚合信息,把这个缩过来,把这个分类的聚合信息我们拿过来,放到我们分类的这一块,好,分类的聚合信息拿到了,那么现在就要设置分类信息,我们当前涉及到哪些分类,我们来看一下,在分类的聚合里边,它的buckets里边是所有它涉及到的分类,而每一个涉及到的分类我们肯定得封装,我们得先拿到它的点,Buckets get buckets,我们看它涉及了哪些分类,我们可以直接来给它进行遍历。好,我们把这个buckets呢,我们先拿过来,这个拿过来,我们来给它进行遍历。
14:35
Buckets,点一个for each,我们来进行增强for的遍历,这个bucket里边相当于就是我们这个解析到的数据,那当前呢,只有一个分类,所以我们这个bucket这个数组里边只有一个,但这一个呢,我们要拿出分类的ID以及分类的名字,因为我们最终要把它们封装到我们这个set catalogs里边,而这个catalogs是要用我们这个类型封装来写一个list,我们这个result结果集里边有一个叫catalog VO,我们封装为它的list,好,所以我们在这就希望有一个它这个叫result的catalog VO,那么就叫catlo vos等于。
15:18
你有一个a list,我们准备要封装一个这个,当然这个我们最终把它放到这儿,它有多少种结果呢?我们就来放过来看看log Vs点一个最终and,那我们相当于就是bucket里边,只要我们分析到了一个分类信息,诶,这是按照分类聚合,它有一个,我们就把这一个分析来得到它的ID,得到他们的名字,封装成我们这个VO就行了。好,我们来准备上这个VO。Log,我们这个VO,我们把这个VO呢先来创建出来,把这个VO创建出来给这儿一放,然后呢,这个VO里边的数据从何而来,我们就来一一分析,首先这个buckets里边有一个K,这个K就是我们说的分类的ID,它涉及了多少个分类,那所以我呢,接下来先来获取到bucket的key,点一个get key,因为这个K呢,我们是数字,所以我们还能把它get key。
16:18
按子number把它转成数字,或者呢,我们直接拿成string行,我们拿成string吧,因为我们现在要转成一个long类型,好,我们现在catalog VO里边点一个set catalog ID,这个ID呢,我们就用long把我们这个解析过来,我们得到的这个string,这就是我们的分类ID,我们这个得到分类ID,得到分类D,这是我们能得到的分类ID,我们给它设置上了,包括我们看这也可以,这个K是分类的ID,当然我们想要得到分类的名字,我们是基于这个ID,统计这个ID还有多少种名字,相当于又是一个子聚合,所以我们想要获取到名字,得获取到子聚合里边的8K里边的这个K,那么就来拿到这个子聚合,子聚合呢,那就相当于拿到我的bucket当前的。
17:13
这个信息好,设置完了以后再来得到分类名,要获取它的子聚合,所以它有一个叫get aggregations,这是它的子聚合,而这个子聚合里边呢,我们只需要得到第一个聚合的结果,它的这个聚合出来的K信息,那就是我们的分类的名字,我们可以来看一下这个名字呢。我们把它当成string来看,Will as,我们的string,我们来will test吧,我们把它变成这个string,还看不出来,那我们就直接用就行了。bucket get aggregations get aggregations,相当于bucket拿到它的所有聚合,这个聚合里边我们先得拿到这个分类的名字的聚合,那再来点一个get,那按照这个名字拿到这个聚合,拿到聚合以后呢,把它要转成我们这个指定的类型,因为我们看到分类名字的聚合,我们来找一下这个K225是我们品牌的聚合,然后呢,它的小聚合里边那。
18:18
第一个聚合,它的名字叫分类的名字聚合,它呢是一个叫past strings,所以我们将它转成一个past。String terms,好,我们转成它就行了,然后呢,用分类的名字的聚合啊,点一个还是get buckets,这个buckets呢是获取到它里边的这个,然后呢再来拿到第一个数据,所以bucket里边拿到第一个GET0拿到第一个它里边的这个get key and string,这就是我们得到的catallo name信息,我们把这个name信息呢拿到这,然后呢,我们要给它放到我们创建的看log view这个对象里边,点一个set,看到log name,我们把这个name呢放在这,好这就是我们设置的分类,那这个分类呢,可能涉及到有很多,所以我们便利它的bucket,每一个bucket里边,我们提取出分类ID,提取出分类名字,最终呢,把它们保存放到我们这个集合里边,那分类就设置好了,那接下来我们再来设置我们的这个品牌。
19:29
我们这个商品所涉及到哪些品牌,我们还是result要set brands这个品牌,而这个品牌呢,还是品牌的VO,所以呢,我们来先准备一个品牌的这个VO集合list,那是品牌的这个VO集合啊,那就叫brands VO等于new一个a list,那希望最终它里边有数据来放到这儿,然后我们继续来进行分析,我们还是从response里边,我们拿到品牌的聚合response点,首先品牌的聚合呢?
20:03
它是另外一种聚合,在所有的这个聚合信息里边,我们再来获取brand agg,所以呢,我们来看我们的整个大response来,我们重新把它缩起来,那我们的整个大response里边,我们的真正的response在内部的response,它的聚合里边有三个聚合,我们之前获取了第一个,接下来我们品牌的聚合在第二个叫brand agg,好,我们来copy value6,我们现在来获取它的聚合信息点get obggregations,直接来get,我们按照聚合的名字拿过来,而且这一块聚合的最终得到什么类型,我们就看它返回的这一块是什么类型,Brand agg叫past long term,好,我们就把它复制过来,这是我们获取到品牌的聚合,当然品牌的聚合里边呢,我们还是看它buckets buckets,里边代表了我们当前到底有多少种品牌,好,我们点一个get buckets点我们直接来进行。
21:03
For each便利,好,我们使用增强for,那在这儿便利的话呢,我们就得到了我们里边的每一个bucket,相当于我们聚合的品牌,我们看这有一个品牌,相当于是九号品牌,所以我们需要提取品牌的ID,品牌的名字,还有品牌的图片,那我们先来准备一个品牌,那有一个我们叫brand的VO,我们准备一个这个VO来封装数据,这些数据呢,包括如下,第一个来得到品牌的ID,品牌的ID,然后呢,我们再来得到品牌的名字,然后我们最后再来得到我们这个品牌的得到,得到那品牌的图片。那我们这个品牌的ID,我们来看怎么做,那品牌的ID直接拿到当前bucket,它里边的这个K是个九,那就是品牌ID,所以bucket直接点一个get key and the number,我们可以直接拿上数字,拿着数字呢,我们要到它的long值就行了,这是我们品牌的ID,那么就叫brand ID,还有我们这个品牌的名字。
22:12
我们也来得到一下,而品牌的这个名字呢,就比较麻烦了,我们说一个品牌的ID肯定只对应一个名字,所以我们把品牌的聚合信息都放在buckets里边,这是当前第一个品牌,九号品牌,而它的名字以及它的图片,那都是一个子聚合,所以我们现在还得拿到这个子聚盒才能得到,那么继续现在呢,这个是bucket,是我们当代表当前品牌,那还是拿到当前正在便利的bucket能获取它里边的聚盒,点get aggregations,点继续来get,来获取一个聚合,获取哪个聚合呢?这个九号品牌里边的聚合有两个,首先第一个,第一个呢叫brand image agg,这相当于品牌的图片的聚合,把这个图片的聚合拿来。
23:05
它里边呢,肯定又有非常多个值都在这个bucket里边。但其实呢,就只有一个,所以我们直接点get buckets,当然要get之前我们来先转换一下,把它呢,我们来强转成我们这个叫past string terms,我们看这个bucket里边是什么,我们就来写什么past string terms,好这个string terms我们就可以来得到它的buckets bucket里边的第一个buckets里边第一个它的key,那就是我们品牌的图片信息,如果图片还有子聚合,它在这就有了,我们现在没有这个子聚合了,好,所以我们在这来继续得到图片,那就是get key and string,图片呢是一个字符串,这是我们得到的品牌的图片信息,好图片把这个图片呢,我们先来放到下边品牌的图片,我们先得到了,然后呢再来得到品牌的名字,好把这个图片拿过来。
24:09
然后最后一个品牌的名字还是一样,名字呢,不在图片的这个聚合里边,把这个聚合缩掉,我们在另外一个聚合叫品牌名字的聚合copy value,所以呢,我们还是得到当前正在便利的这个bucket里边,它有一个叫get aggregations.get我现在得到品牌名字的聚合,同样的拿到它所有的buckets,但是我们拿到之前要进行强转,而这个强转成什么类型,我们就来看这个品牌名字的聚合,它给我们返回的这个buckets里边,这个叫past string terms,那么就转成past。String termss,好,我们把它转过来,再来点get buckets相当于我们拿到这个里边的buckets,我们这个name里边的这个buckets,这个buckets的第一个的key,那就是我们的品牌名字,点get,我们来第一个,第一个那就是0.1个get key按string。
25:16
这是我们的名字,好。这是我们得到了品牌的名字,然后我们把它封装好,我们放在这儿,好,这是品牌的名字,好,接下来我们就根据这些信息,那最终封装成我们这个brand VO这个对象,那这个VO里边就来保存好,我们来这些数据点一个set,品牌的ID是我们指定的值,包括brand VO里边品牌的名字是我们指定的值,还有我们品牌的图片,Brand VO也是我们指定的值,Set image把这个图片呢也拿来好,这个品牌信息封装好了以后,我们给它放到这个VS封装的这个集合里边。
26:02
我来找到这个VS集合,就是它品牌的VS,点一个and好,来添加进我们这个VO,相当于品牌就封装好了,那最后一个就是我们来封装我们所涉及到的所有属性信息,来点开,点开我们来看一下我们所涉及到的所有属性,我们该怎么获取,还是一样。我们返回的这个响应里边,我们在aggregation里边有我们所有命中的记录,而我们属性呢,它是一个嵌入式的这个命中at t ragg,它是一个嵌入式的聚合,所以我们就要得到这个聚合,好,我们先来得到这个聚合,我们从response里边,Response里边点get obggregations,点一个get,现在先得到属性的聚合,我们把这个聚合呢,先转过来,这个聚合它叫。Past listed,那么就转成past。
27:03
Listed,好,我们转成它就行了,这是属性的聚合,那接下来我们就要分析这个属性的聚合,我们还是对照着这个返回的数据分析,属性的聚合里边我们怎么知道有多少种属性,我们看这个aggregations里边,所以呢,从它里边还是得到aggregations,它里边呢,首先有第一个aggregation叫at tggg,所以我们来看我们这个属性的聚合,好,我们把这个分析完属性的聚合先得到我们这个嵌入式的聚合是at radgg,所以我们现在来得从我们at t ragg里边先得到我们这个at TD的agg。所以呢,在这个agg里边来拿过来点它呢有一个get aggregations.get那现在来要获取它的ID的聚合,我把这个复制来。Copy value。
28:03
那这个聚合ID的聚合拿到以后,我们这个聚合呢,是一个叫past long term,那么就把它转过来past。Long term,这是ID,那相当于得到了属性的ID,属性的ID值是多少,那就要遍历buck里边到底我们聚合了多少属性,这都有,但是呢,最终不管怎么聚合,我们先来看我们要封装的结果,那result里边呢,要set at t RS,而这个at t RS是一个list类型的,那叫at tr VO o就是们检索结果里边的这个at t VO,那就叫at tr vos,你有一个a list。我们把这个呢最终想要放在这儿,而这里边的所有信息都是通过这个at tgg分析得到的。那我们来继续给它一一分析,这块分析呢,我们先来看at t,我们先要遍历它里边最终聚合到的结果,这个8K信息,好我们拿到它来点一个get buckets来进行遍历,我们还是用增强for。那接下来遍历呢,这是每一个相当于属性信息,每一个属性信息都要拗一个这个at tr VO对象,拿它来封装at tr VO,我先都把这个准备好,而at tr VO里边我们主要要用这几个东西,一个是at tr,属性的ID,属性的名,还有属性的所有可能的值。好我们接下来就是几个,第一个得到属性的ID,然后呢,第二个得到属性的名字,然后第三个。
29:46
得到咱们这个属性的所有值,好,这个ID呢,我们好得我们当前便利的这个bucket,我们来看当前便利的bucket,我们这两个bucket相当于我们有两种属性,好我们来分析一下这两种属性,首先第一个属性的ID是15,我们在这儿封装了,所以要得到这个ID,直接拿这个bucket点一个get key and number,拿它它的long value值,那么就能得到属性的IT。而我们属性名字和属性值的聚合,我们相当于又开了两个小聚合,在at trid里边每一个ID我们又聚合了它的名字和它的各种情况值。
30:35
所以我们就来拿到它的名字以及它的值,那就来写一个,那现在想要拿名字,当前bucket想要拿名字,相当于在当前PA bucket的这个子聚合里边,那么聚合了两个,一个呢叫它的名字聚合,一个呢叫它的值聚合,那么先来获取它的名字聚合,Copy value,好在bucket里边来继续来获取它里边的聚合,获取哪个聚合就是这个聚合,然后呢,我们为了方便还要把这个转一下,那这个聚合呢,我们最终是一个叫past string terms,那么就转成这个叫past string terms好转过来以后呢,我们接下来点一个。
31:21
Get,它8K相当于我们拿到了它的所有名字可能的值,这个名字肯定只有一种情况,所以我们直接拿到零里边的K就行了,所以我们拿到它的名字点一个GET0,点一个get key and string,因为我们一个属性ID肯定对应一个属性名,我们现在就拿到了属性名信息,我们叫at tr name,那接下来属性值也一样,我们在这个bucket里边,第一个是属性名,第二个at tr y6agg,它就是属性值,我们接下来bucket点一个get aggregations来继续get,先来获取属性值的聚合,那这个聚合呢,还是一个来看,它是一个past string terms这种类型的,我就来给它转过来。
32:12
好,转过来,转过来以后呢,接下来我们点一个get buckets还是拿到它的buckets,只不过我们这个值可能有多种,我们的这个buckets集合里边来看,这个bucket集合里边有可能是不定向的,有多个的。所以呢,我们值到底有多少,我们要遍历这个buckets,最终得到一个string类型的东西,所以呢,我们直接使用它的stream API来进行遍历,点一个map,我们来一一映射,来映射一个它里边给我们传入我们当前的这个bucket对象,然后呢,我们要给它改装,最终返回成我们一个字符串。这个字符串呢,就是传入我们的当前的这个bucket,我们就叫item,我们正在便历的这一项,那么传入的是拿到这一项里边有一个get k安string,这个呢,String相当于就是我们想要返回的这个值,相当于我们八里边遍利第一个它的这个K,所以呢,我们把这个拿过来,我们来放到这,这是属属性的所有值,把这个值呢,最终收集成一个to list,好收集成一个string的集合给我们得到,这是我们所有的at tr values可能的值就叫values,然后呢,我们最终把这些都得到以后,我们要封装我们的at tr VO对象哈,At t VO点一个set,它的ID是我们前边得到的,包括它的名字,At TV的名字,Set是我们前边得到的,还有它所有。
33:53
不可能的值at t VO点一个set,所有可能的值的list集合是我们这一块得到的,那么这一块呢,就封装结束了,当然千万别忘了我们这个at tr VO封装好了以后,一定要放到这个vos这个集合里边,点set,我们应该叫and,我们放到这个里边,把我们刚封装的这个我们放里边,那下一节课呢,我们就对我们整个所编写的这个方法来进行一个测试。
我来说两句