00:00
啊,那接下来呢,写我们的这个代码啊,还是从这个map层开始写对吧?啊map啊,那还是诶叫gma map,那我们叫不叫g ma,我换一个啊换一个对吧,叫UV吧,叫UV啊跟这个日活相关的就是其实就是流量域里边的对吧?当然我们可以写一个流量域,Traffic也可以啊,Traffic这个呃,Map也行啊,无所谓,因为咱们就写两个嘛,所以我们就随便取一个名字啊呃,Map对吧啊叫UV map是一个接口啊。嗯,那么这里边呢,我们想一想,当然接口里边public反正你也不用写对吧,反正public你也不用写啊,反正就省掉就行了,嗯,那我们想。这玩意返回值类型我们写什么呢?因为正常的,你看你假如写的public。当然他他等会会让你删掉标灰对吧,那我们先写上,接下来写反回之类型,那这个。返回值的类型,我们写什么呢?
01:01
好,我们想一想。我们要写什么呢?啊,泽总说他是一个map。呃。这。你把眼光放长远一点,我们搞得更复杂一点啊,假,假如说咱们这样。怎么做呢?来啊。大家想这个问题。就他。啊,我不搞两个,我搞三个对吧,比如说我三个对吧,但是呢,我只要两个,因为我们要搞复杂的嘛,对吧,两个列好像还不是那么特殊。我搞三个列,就是N个列对吧。啊,就是行呢,八行列呢,三个列,那这玩意儿你写什么。
02:00
比如说我的搜就长这样对吧,但是呢,邮件我不要啊,但是呢,我得写这种,我得告诉大家像这种应该怎么写对吧,多行多列的,因为刚才那个多行两列的好像还有一定的特殊性,大家想是不是?多行两列,好像还有一定的特殊性,对吧,好像那个泽总说map,哎,泽总你说的map是不是以为他他们对应啊是不是。是的话,扣一你的map是不是认为可以这样去对应?你是这样认为的,给我扣一好吗?是不是?是对吧,啊,那这个你三个列呢,因为我们已经聊到多行多列了,对吧,叫多行多列,所以呢,我们得找一种最通用的方式,你想吧。啊,有没有同学知道这个地方我们该用什么?
03:03
那就例子方派吧,哎,对了啊,就是你要想到一个问题,很简单的一个问题,你看啊。Top three,那我写三个,那不白写了吗?我这三代表N呢,对吧?班长,那我要写四个呢。对吧,你不能这样想啊,你不能这样想,你得想的是什么呢?我们最通用的,你就想这儿啊,我们之前不是写过一个什么。对吧,你这也太局限了对吧,我们之前写过一个JDBC,要求你看啊,为了放这种数据吧,叫多行多列的数据,未知的对吧?那我们通用的什么叫list t。注意它叫list t对吧,就是说每一行。它的类型是一样的,然后呢,由于你有多行,所以呢是一个集合。啊,由于你有多行,所以是一个集合。对吧,所以呢,咱是一个集合。啊好,那么里边我们就可以搞一个扎并,对吧,你可以写个扎并,扎病呢,有三个字段,一个cuv ug可不可以。
04:07
就是我自己写一个招聘,我叫uvug可以吧,或者说呢,我们就直接用什么用map也可以。啊,或者说呢,咱们直接用这个map也行。啊,直接用那个什么呢,叫list对吧,你要简单一点,你要不想写这个招聘啊,那你就写这个list map。对吧?好,这个呢,就是select叫UV by ch,对吧?比如说我们叫这个名字,按照这个CH去求这个UV,好,嗯,那我们没有limit对吧,Limit只有八个,那我们就没必要去删除了,对吧?我们就in data,还是传一个data进来就够了。OK吗?啊,那这里面的map啊,你可以用什么呢?用这个扎并来代替。听懂对吧,这是最通用的,你再结合着这玩意儿来看一看。是不是跟这个我们之前写的gbc u查询是一模一样,没有任何区别。
05:05
对不对,多行多列,大家想是不是。对吧,多行多列就可以这样表示。啊,就可以用这样的方式表示每一行数据是一个对象,是一个map,或者说你这写阶层object对吧,写这个扎那都可以啊,那都可以。对吧,啊,那都可以,而且你要知道这个map它长什么样子,你一定要清楚啊。呃,这个咱们写一个多函数是吧。这个是获取啊,就根据。渠道。分组获取当日的日活,对吧,日活数据啊好,那你一定要注意这个map它长什么样子啊,我就写这个map。对吧,这个list就不写了啊,这个map呢,是注意它里面有三个元素啊,比如说我们这个结果,对于我们这个结果而言,我就放一个没有用的可以吧,就为了说明这个东西呢,未来大家应该怎么去处理这个东西,其实是没有用的,对吧,对于我们这个需求而言,但是呢,我就要放进来,就告诉大家你有两个列,三个列,四个列,五个列,这都一样的,对吧?好,那这边呢,是CH指向什么?第一个叫App Store吧。
06:25
APP啊,这是第一个,第二个呢是UV啊,然后指向这个什么465,第三个是ug,然后呢,指向我们的啊好,那如果说我们再多一个列呢,你再多列呢,无所谓呀,我就逗号点点点呗。无非就是再加元素个数呗,你多一个列对吧,那你行多呢,行多,大家也不要忘了,咱们是一个什么,是一个例子对不对,是一个大的例子吧。大家想啊。
07:02
咱是不是一个大的例子对吧?好,那既然你要想这个行变多,那更简单了,由于我是例子,哎,逗号对吧?呃,再来一个啊,比如说我再写一下啊。第二个是小米是吧,小米商城好那316。36,然后呢,这个是4UG是四对吧?哎,那比如说它这样子的好,那你再多行那也没关系啊,那就点点点呗。对吧,那你看这点点点表示可以加列,这点点点可以表示任意行对吧?任意列任意行是不是说明我们只要有这个返回值类型list map或者list招啊招的话呢,你就这写招聘名称吧,或者说写接森object对吧,是不是这个所所有的最最复杂的情况就被我们所掌握了。是不是?对吧,好这个东西呢,我们站到这来啊。
08:06
我们粘到这来可以吧,因为它是它的一个返回值嘛,对吧,返回值啊。然后点点脸对吧,然后这。对吧,那它是属于这种叫最复杂的。一种情况了啊,这个是日活所日当天日期啊。对吧,既然有这个东西呢,我们就写一下对吧,它的返回值呢,就长这样。这没毛病吧,对吧,这要清楚的,这个要清楚的OK吧,啊好,那未来呢,你就懂了,就你再怎么复杂,你也不可能比这个复杂了,就是你的返回值结果对吧,然后之后呢,就数据加工,那这个每个需求都可能不太一样了。因为你要的接层格式你图形不一样,你要的接送格式不一样,那将来加工过程就是你Java处理这个数据的能力了,对吧?啊,那我们先呢,这块就map就先搞定了,对吧,我就放进来啊,当然还有一个东西没拿这个ADD select对吧。
09:09
把这个再拿过来啊,然后呢,把这个搜狗语句啊,我粘过来啊,从这呗。呃,或者说我直接用它啊,我直接就用它就得了,对吧,我们说了。嗯,Out be不需要了啊,Outba不需要了,直接拿到这啊好往那一放,往这一放以后呢,接下来我们要改一个东西,就是改这个。改这个日期对吧,日期不能这样写,然后还是一样的井号加括号对吧,然后呢,用data来表示啊好,那我们也不需要那个limit什么什么东西了。对吧?啊,那也就是说你正好排个序啊,嗯,不需要排序了,因为在我们最终展示的时候,那个上面可以排序。好,那个上面可以排序。听懂对吧,那个图形上面到时候可以排序,这块呢,我们也没必要排序,其实排序等会呢,还会乱啊,还会乱,到时候我们再说为什么还会乱啊,好这块呢就搞定了。
10:00
OK,这块。有没有问题。大家。应该没有问题吧,对吧,咱们呢,是相当于把这种最复杂的情况都写了,对吧,因为我们之前的工具类就这样玩的,因为工具类呢,我们要表示所有的类型,那我们用的就是这种最复杂的方式,对吧?而现在呢,我们现在写的就是多行多列,那就是最复杂的,但是这个邮件没有用啊,只是我们给拿进来作为一个辅助功能,对吧,作为一个辅助功能来说的啊。好,这是我们所看到的这个map,好,那么接下来呢,我们要写这个service做数据加工对吧?好,那这边呢,我们在这儿来写一下叫service,对吧,点开先呢,在接口里边写一个方法啊JA service啊,比如说呢,我们再写一个吧,再写一个啊。跟那个保持一致啊,那咱们那叫UV。
11:00
啊,当然你这个是一张表一个啊,没必要说一个需求一个,一个需求一个也太奢侈了,对吧?啊,但是呢,我这边就按需求写一下,因为我只写两个嘛,对吧,我想把它分开啊好,那这边呢是UV service。Service,然后ipl对吧?啊首先呢,它得实现我们的UV service啊好,那它称为service呢,要加一个service的一个注解对吧?好,那么先写这个接口啊,啊接口呢,就是这边是查询获取。按照这个渠道。分组的日活数据对吧,这是我们的一个需求啊,这接口接口呢,那我们想这个地方我们要做什么事。对吧,我们要想一想它的返回值是什么内容了。啊。嗯,那我们想啊,他现在的数据呢,是什么样子,是这个样子哈,来看。张亮。我们肯定要加工啊,比如说这里边这个列就不要对吧,当然有的人说这个列是你自己加的,对,你可以不要它,你就去掉了,对吧,但是我们现在就已经要了这个列了,我这个需求就不要,对吧?那是不是我们加工的时候要把这个列干掉。
12:12
对吧,我不需要不要这个邮件啊,是不需要这个邮件的,好,那么接下来还有问题,我们最终展示的格式啊,来,我也粘过来。啊。定在这儿。呃,那我们对着这个来分析,我们到底要做什么事?来看啊,现在呢,咱的数据涨这map一个例子对吧,里边的map ch a UV对吧,Ch UV UV每一个呢,在每一个行里边。呃,那未来我们是不是专门要把这个CH对应的这个东西给它干什么,放在这个位置。然后呢,要把这个对应的值啊,放在这个位置。对吧,那我们想啊。
13:00
那这个呢,首先。最终结果里边我只要这两个东西对吧,一个渠道名称啊,一个UV数对吧,我只要这两个值对不对,我只要这两个东西,其他的我一概不要。对吧,其他的我一概不要。那么我要把这两个值取出来,而且未来在用的时候大家看啊。我要把这个它放在一起,把它也放在一起去用,对吧,它不是说a appstore对应一个465用啊,小米对应一个316用啊,那我们想一下这个数据呢,在service里边,我们最好把它加工成什么样子。就方便了。对吧,就是到我们。Controller去用的时候。对吧,到我们controller去用的时候就方便了,对吧,我们最后拼接完这个切就完了。那我们呢?要把这个东西专门取出来,对吧,然后呢,把这个东西取出来。
14:02
那我们这个地方的返回值,大家告诉我应该写什么类型?我们的返回值应该写什么类型,大家告诉我。思考一下,思考一下。啊,送了一个666。啊,一个大的map ch是list UV是一个list。按照这种可不可以啊,就是泽总所说的能不能行啊。
15:01
把它搞两个集合对吧?啊搞两个集合,然后呢,放在一个map里边。能不能行啊。可以对吧,啊,当然可以啊。呃,这种行不行,可以吧,你要对这个数据遍历嘛,便历,我在便历之前创建两个集合,一个放CH的,一个放UV的,对吧?然遍历完之后呢,把这个CH取出来放在第一个集合,把这个UV取出来放第二个集合。这不就可以了吗?对吧?呃,那我们不用这种方式,我这样行不行,大家看啊,我把这个数据呢,就变成什么呢,变成APP啊。我我是一个大的卖,就是一个卖。里边呢,这样465。括号,然后呢,变成这个小米。小米对吧,然后呢。然后316。啊,点点点。我就只变成这个卖跑,大家想可不可以。
16:07
能不能行,大家告诉我。啊,荣总说二元组也可以啊,你们这么怎么那么喜欢用元组啊,写Java代码干写多了是吧?喜欢用他是吧。我现在问的这个map可不可以啊,我现在把它变成这个样子可不可以啊?能不能行啊,就除了泽总所说的那种,我们直接放在map里边,我不要用list把它单独封装起来,我不要用这个list把它单独封装起来,我就直接用一个不就完了吗?对吧,为什么吧?因为未来这个map我可以有一个什么叫key set,对吧,还有一个values,是不是可以把它这两个值取出来啊,对吧,我可以分别获得它的K和Y6吧,对吧,主要得益于这啊,如果说你的map没有这个API,那就不行了,因为你不能把K单独取出来,不能把value单独取出来,那你就比较麻烦,你还得便利一次,还得放到集合里边,那不如说我用择总那种方式,对吧,直接放到集合里边,那不就很好吗?但是呢,其实我们不用,因为map呀,它可以取K。
17:29
可以单独取K,也可以单独取这个value,那就很方便啊,对吧,我就直接把它封装到一个map里边不就好了吗?所以呢,咱们写一个诶map对吧?啊,假如说呢,我们给他一个呃,Map对吧,给他一个类型也行啊,不给类型其实也行啊。直接写一个map对吧,因为我们写的map也不是哈希map对吧?啊,当然我们new的时候创建的时候肯定要用这个哈希map了,那毋庸置疑的对吧?好,那接下来呢,我们就直接叫get这个UV啊,UV叫BYCH。
18:03
There,根据这个渠道啊,还是一样的,那我们还是in一个date类型对吧,好,那这样的话呢,咱们这个时间类里边肯定就报错了,好加回车对吧,实现。好,那首先呢,这边我们要写一个叫UV的map,对吧?UV map,那然后呢,自动注入。对吧,让他自己给我们去构建啊,我们不需要构建,我们也构建不了,我们没有这个时间类啊,你你它的话还得写自己写时间类,那就我们用MY干嘛呢?没有用了,对吧?好,那这里面呢,我们就分为这几步走,首先创建。创建哈希map。对吧,用于。存放。结果数据就是转化后的一个结果数据,对吧,我们用一个哈希map来搞定一个事情啊,那这边这是第一步啊,利用一个哈希map啊,那第一个位置呢,是我们的string类型啊,第二个位置呢,必然是long类型,对吧?浪类型因为是UV嘛,对吧,UV啊,你是long类型,因为some啊。
19:05
好,那这边呢,是得到一个result map对吧,得到一个结果集,好第二步叫查询。House。获取数据对吧?或者我们要出据,那就拿着UV map.select对吧?Data ctrl加V得到一个集合map list对吧?好,那第三步呢,就是便利。便利集合。啊,将取出是取出渠道和日活。数据放入结果集。好,放到结果集里边以后呢,这是最后一步,就是返回结果。返回结果对吧,返回的就是谁呢?返回的就是这个without map对吧?这一部分呢,好写,我们先先写了,最复杂的就是它呗,对吧,但是现在我们分析到现在为止已经不复杂了啊,那我们叫便利啊,那现在呢是map list点错误。富呃,负循环啊。
20:03
好,那这是一个一个的小map啊,那我们要往里放啊,Result map.po啊往这边放,放什么呢?放那个appto啊,第一个假如说是appto跟465就这个map里边对吧?好,那我们从这个map点。Get直接获取谁呀?叫CH对吧?获取CH好第二个位置mapb.get第二个位置直接获取我们的叫UV对吧?好,那这个里边波速呢,是因为是类型的,第一个呢是思辨类型,做一个校转,第二个位置呢,是一个浪类型,对吧,那咱们呢也做一个这个转换,诶就搞定了。对吧,没有什么其他的,直接就把这个CH取出来,跟这个UV取出来,本来呢,他俩在一个。Ma里边是这样放的,哎,CH对吧,指向这个to。然后呢,有一个UV。对应这个465,还有一个ug对应这个什么二对吧,他们本来放在这个map里边,那我们呢,把它转换转换放在一个map里边,什么map呢?诶。
21:08
它俩变成一组数据,就是ABB store对吧,对应465,哎,变成这样的数据。对吧,哎,那这是我们要做的一个处理,因为这样的话,到了我们的cor就简单一些了。对吧,到了我们的controller就会简单一些,因为这样的话呢,我们就单独的有这个APP做小米,OPPO对吧,豌豆荚,Vib VIVO这些东西都有了,然后呢,有这些数字我们就拼接一个。杰森字符串就完事了,对吧,好,那这个就搞定了对吧,搞定了啊好,那我们数据呢,就可以不需要了吧,这些东西都不需要了啊。呃,Controller呢,我们之前教的数个control了,对吧,那我们就用这一个control了吧,就行了,好,那首先第一步我们得先写一个方法啊public对吧,然后呢,String返回值,String类型,然后呢就get。
22:00
UV叫掰。啊,CH对吧,括号。好,首先呢,我们得加一个at request对吧,这边呢,我们这边叫一个CH,比如说就叫CH可以吧。好,那这我们得有一个参数,那这个参数是不是跟他一样啊,大家想。对吧,跟它完全一样吧,没有任何区别,因为也只要一个日期,对吧,所以呢,我们也这样写啊好,这边是不是少了一个括号的啊,少了一个括号A。嗯,这个括号对应它。我拿的啊,少了一个他。对吧,少了行参,我只拿着这个传过来,参数少了行参啊好,那第一步呢,是不是一样直接把这个拿过来。对吧,第一步直接把它拿过来啊,就是说如果说等于等于零,那我们就用今天对吧?啊,得搞一个日期啊好,那第二步。
23:00
第一步呢,处理日期对吧,这个大家都一样啊,第二步呢,就是说。获取数据。那咱们再加一个变量。Private,然后呢,UV service对吧,UV。好,那我们获取数据,那要从这个UV service点。Get,把这个data塔填进来,好,这样的话呢,我们就得到了一个UV ch对吧?XCH指向这个内容了,好,那我们单独的把这个取出来啊,点he said对吧,这个呢是。Column啊,或者叫CHS对吧,CHS就是渠道啊China啊好,那还有一个UV点,呃,Values吧,Values这个呢是UV。S,对吧,它呢是一个UV的集合,好,那这是我们要的数据,接下来呢,我们拼接接并返回,对吧,我们可以用拼接的方式啊。
24:00
拼接接算字符串并返回。好,那直接为对吧,好,那我们怎么写呢?把这个拿过来。把它改一改啊,把它拿过来看到C啊啊往这一放,然后呢,我们要改。我们要改对吧,这里边杠N咱就不要了,CTRLR啊杠N。直接替换掉是吧。好,那我们想。这个位置咱是不是要换成K,就是说这个CS对吧,那这个位置呢,咱们要换成什么UVS对吧?好,这个事情咱们之前是不是做过,大家想。咱们做过这种事情吗?把一个集合。把它变成字符串拼接到这个里边,做没做过?还有没有印象了。大家。啊。有没有印象?我们是不是之前拼接过那个ABS语句啊?
25:02
对吧,阿的语句好,那么接下来呢,这块我们就可以怎么拼接。怎么写来啊,两个加号中间对吧,在这。就是string点。注。对吧,点join好join的东西呢,那这边是UVF啊第二个位置咱们按逗号分割是不是。还记得吗?这个操作你写出来有印象了吗?想起来了吗?有没有想起来是不是这样?啊,就涛总跟泽总记得是吧,其他同学都已经忘了啊。敲的代码都已经忘了。啊,咱们之前写过啊,是up色的对吧,也就是在我们的。Think function,自定义的think function d think function那个类里边对吧,忘了。
26:02
这么快吗?大家。忘的真快哦,就是这个项目还没写完呢,项目就忘完了对吧。真真真厉害啊,真厉害。在DM方程里面。炸了。我们写过的啊,这个代码我们写过的对吧,这种方处理方案啊,我们已经写过了,对吧?啊。就是项目没写完,但是大家呢,已经忘完了,挺好的,大家适合练那个太极对吧,啊练太极剑是吧。啊,张三丰教这个张无忌啊,忘了吗?啊,忘了一点啊,忘了吗?忘了大半啊,全都忘了。大家都学太极拳,我也感觉是啊,学这个太极剑法对吧。啊,就是我这边还没讲完,大家已经忘完了啊,忘的挺快对吧。无招胜有招,是不是啊?好,那这块呢,咱们就搞定了,那同理这块咱们是不是也这样处理一下对吧,把这个呢全部删掉啊就这样删,删掉之后呢,Three us.join啊然后呢,把这个CHS放进来完以后呢,这边加一个逗号分割对吧,然后呢,咱们这个东西啊,把它去掉,这是空格。
27:17
对吧,这是空格好,但是这样写有一点点问题,什么问题呢?来看啊。这个数据呢,你可以直接拼接没有问题。对吧,啊,这个UV直接拼接啊,关键问题在于什么呢?在于这。对吧,你看啊,它是什么呢?它有双引号的。那我们这样写的,它有双引号吗?他没有对吧,所以这种方式咱们是不是也讲过,那我是不是可以认为它是按双引号逗号双引号做分隔符的。还记得吗?之前我们写的这个代码是不是按单引号逗号单引号做分隔符,前面加一个单引号,后面加一个单引号,对吧?那这一块我是不是可以认为我是拿双引号逗号双引号做分隔符,然后呢,在这我我加一个双引号,在后面这个位置我加一个双引号是不是就够了。
28:08
对不对,对吧,好,但是呢,嗯,单引号你可以这样加,双引号呢,你不能这样玩对吧,那你看啊,你为什么不能这样玩呢?你在这写一个双引号对吧,你在这再写个双引号,他报错呀,啊但是这不报错,它是因为你正好两边分割开了,对吧,那我们这个双引号要怎么样,要转义。啊,要转移好,那这。也得加一个双引号吧,好,那这后面转移也得加一个双引号,对吧,它不像单引号对吧,你直接写就完了,那双引号呢,你得加这个转义。对吧,啊,你得加这个转移是这个意思。OK吧,啊是这样的一种情况,好,那这块呢,咱们就搞定了啊,所以之前我们导了一个依赖呀,大家还记得就是给他用的啊来看。之前在这儿呢,我们找了一个康姆朗三宝。
29:01
什么玩意儿换行服要拼接?嗯。什么换行符要拼接吗?是什么意思啊?我我没太懂。为什么会问出这个问题呢?是什么换行符?拿换行符?啊行,那我们这块呢,我们就把这个controller就搞定了,对吧。
我来说两句