00:00
行,这个呢咱们就过了,然后接着我们看下一个,下个呢又提到这个optional了啊这个哥们呢,就是来来回回见他啊,哎,自从这个Java体加入进来以后啊八,哎自从八加了以后呢,你发现后续版本每一次都能看到它的身影,这是真想把它做好呀,是吧?哎,这个类的话呢,呃,就像说去解决我们的控制人异常的问题啊,这个每次呢都会对它呢捎带着做一些优化,说在我们这个JAVA11当中说呢,也增加了几个非常酷的方法,就是下边这些比较酷的方法哈,说呢可以很方便的将一个optional转化成一个stream,这个咱们前面呢说是是是之前这块就提到这个事儿了,那或者呢,将一个空的optional呢给他呢。哎,或者呢,当一个空optional的时候,给他一个替代的,哎,就是替代,当然以前也有过相应的一些操作啊,All else啥的,那这块呢,又更丰富了一些,哎,就提到这么多一些方法,这个咱们就不一个一个去测了啊嗯,这呢,我列举出来这些也不是全是11当中的啊,每一个方法的话呢,我去底层看了一下这个源码啊,这个都是它对应的这个版本。
01:05
啊,其中你会发现呢,其实这三个都是在前面都加过的,咱们这个方法呢,咱们讲九的时候呢,这不也说了嘛,对吧,哎,说这个事了啊,然后这两个方法呢,咱们倒是没说,哎,但是这块呢,其实你看这个参数名大概呢,也能知道它是什么意思啊,然后在这个十当中呢,有一个叫all else throw。All else throw什么意思呢?你要这个optional里边呢,本身有数据啊,那这块呢,我就返回你这个value,你要没有数据throw嘛,抛异常呗,啊就这个意思,然后呢,实一当中有一个叫is empty啊,Is empty跟咱们说八里边有个叫is present。什么关系呢?直接在这写啊测试。哎,TEST2啊,这个呢是我们啊叫JAVA11,哎,新特性二啊,新特性二这个呢是我们说的叫op,这个新增的方法,行,这个咱们就挑着来说了,比如第一个呢,我们看到它叫is empty,咱们在八里边呢,有一个叫is present。
02:17
他俩正好是相反的意思,比如说你看啊,我这来一个叫optional,第二咱们不是有一个叫empty吗。看enter,哎,这呢,我们就是一个op吧。哎,这样的情况啊,行,那这时候呢,我们直接呢,去打印一下叫op叫is present,这咱们呢,一开始在这个吧里边就有的这样的一个方法啊,哎,这个呢是我们叫判断什么呀。内部的这个value。是否存在吧?Is present present存在这个意思,那对应的,哎,我们在那叫op点意思叫empty,这俩呢是一个意思还是说正好相反呢?
03:04
判断内部的,你通过这个方法名不也知道吗?这个value是否为空。那如果我们这个是空说你是否存在呀,是不是就不存在呀,那是不是这个就是false。说你这块呢,是否这是个空的啊,说是不是empty,是啊,这就是处,所以他俩正好是反着的啊。哎,这不就是上面这个是false,下边这个是出,哎这个整清楚啊,这个这个就是别把它把它俩当成是一个方法了。成,当然了,你这个前面加个非是不是它俩就一个意思了,哎,对哈,哎,这样加上就一个意思,行,这个就是它,然后嗯,这个咱们测过了,嗯,那咱们测,嗯,测一下它吧,比如说这叫all else through说呢,你如果里边这个Y6呢,要飞空,我就返回一下这个Y6,否则呢,就抛个异常啊,那这个好办,咱们呢,就目前这个op点啊,咱们叫all else through,就这样呗,然后al enter来生成对应的一个具体的对象了啊就它啊这个位置我们写个Y可以不?
04:13
可以了是吧,这个能写完不?声音也可以啊啊,这个返回的,你像我们从右边这个al直接往回生成的,你都能推断了,这不就都可以写了。那这个时候呢,我们呃,输出一下OB接,如果你这个op里边这个Y6是非空的,哎,我就返回你这个具体的值了,那当然当前是空空的话,它就抛一场。哎,这呢,这不就抛异常了,是没有没有具体的这个VALUE6了,相当于哈,那如果在这个之前,你op,咱们重新给它整个值啊,呃,整一个叫optional optional咱们不是也讲过它的方法叫of吗?哎,Of呢,这个这个你得注意点,你要这样写,是不是一定得保证里边都有东西啊,哎,这咱们写个ABC,比如说啊,那此时呢,哎,它就是一个有具体数据了,你要有数据,这个是它就不会返回抛这异常了,就把你这个ABC就给付给他了。
05:16
哎,所以下边呢,你是不是就能输出这个ABC,哎,就这个意思啊,诶所以这里边呢,我们叫all else through这个呢,哎,简单标识一下它这个意思。哎,CTRLC一下,哎,就这么着就行啊好,那除了这个之外呢,这不还有一个两个,这个咱们讲过了啊,这还有两个,这两个咱们挑一个吧,大家你看想演示哪个。看着就有点恶心是吧,嗯,第三个第三个是因为参数比这个少是吧。哎,哪个都行哈,你先看这个意思叫if present or else,这呢有两个参数,第一个呢叫consumer,一个消费者,哎后右边呢是个reval啊,Renoval里边主要run方法没有参数里边呢,也没有返回值啊就这样什么意思呢?说如果啊,首先呢,咱们调了一个方法呢,是一个optional的一个对象,说你这个对象如果要对应的value是非空的,那就相当于是让他去做这个事儿。
06:17
就是对象飞空了,那就干这个事儿,那你要是Y6要空了的话呢,空的话呢,你就干这个事。哎,这不是对应的这个接口都会有它相应的这个方法吗。哎,那就去分别做这个事就可以了。哎,那像这个consumer里边的方法没有返回值,Reable呢也没有返回值,所以整个这个方法的话呢,也不用考虑返回值。哎,这意思下边一个,下边一个叫奥啊。这个or呢,里边需要填一个叫supplier啊,这个相当于它就是一个啊叫供给者了是吧,供给者的话呢,它里边放的是一个optional,什么意思呢?说你要是调这个all方法的optional,你要是个啊这个VALUE6要非空的,那我就返回你当前这个optional,那你如果要调这个方法的optional,你要是里边的value空了,那我就返回你呃参数的这个optional。
07:07
哎,就这个意思,哎,上面这个呢,其实也挺清楚,这个其实也很清楚啊,咱就不都测了,测,有同学说测这个,那咱们就把这个三这个测一下啊。哎,咱们来测试这个凹方法,首先首先首先我们开始拿这个op吧。Op呢,你注意它此时呢,不是一个空的啊,那op呢,我们点第一个凹方法,这里边儿参数注意就只有一个啊。这个参数里边我们要放的什么呢?放的是一个optional。哎,这放的是个optional,行,那咱们提前把这个optional给他提供好,那咱们就optional点,那我还用这个of吧。啊,还用of了啊,这里边儿我写一个hello。然后ctrl al enter一下生成这个我们叫OP1,然后我们把这个op呢扔到这里边,嗯。
08:00
嗯,看看啊,咱们上边这个写的是一个string。啊,这个还不能这样写哈,这个你这样写成了一个啥,成了一个supplier了哈,咱们这里边儿呢,需要让你填了一个叫供给者,供给者它里边是不放东西,但是返回东西,那你得这么着是吧O呗。对吧,那里边你得写个攻击者,你要写op,这成了把这个他付给supplier了啊,这这它又没有实现这个接口得这样写啊,那我们在这al enter一下,哎,生成一个叫optional,这个叫OP2吧,那现在主要关心的就这个opr到底是长什么样子的。哎,主要关心的是它啊,这不我们刚才看到这个方法的说明了,哎把这个说明呢,我们再拿过来,哎,CTRLC。嗯,那么调我们这个二方法的话,是我们这个op啊,就是看你这里边的对应的Y6,这个Y6呢,是ABC了,飞空啊飞空,那这时候返回的opr其实就我们的op,那如果你这op呢,里边这个Y6是空的,那就返回OP1。
09:02
啊,这个点,那咱们这个目前问题反馈的是谁啊,哎,就是op呗。因为人家飞空,哎,这不就是op pop里边不就ABC吗?这个啊,那如果如果我们在前面给他做一个调整。在这吧,把这个op咱们再重新的叫optional.empty一下。那这时候呢,你空了,是不是就返回这个op,就成了这个hello了。哎,这不就是hello了吗?行,就是这个点啊,主要呢,就是取决于说白了就是我们这时候呢,咱们说啊叫all else。哎,咱们这个说呢,你可以如果当前这个Y6呢,不空,我们就返回你这里边的值,如果你要空了,我们就返回这里边这个值,这咱们之前说的这个事儿,现在这个all all的话呢,它针对这个option optional啊进行一个反馈,说你返回当前的optional,或者是当前这个呃,行参的optional。
10:05
啊,咱们讲的那个all else呢,它还是这咱们不是说八里边这个叫op点,叫all all else,它针对的呢,是你里边这个value,我到底要谁,而这个all呢,是针对的是我到底要什么的optional啊,一个返回的是容器,一个返回的是容器里边的value啊,这个有点区别啊,成这个就是我们说的这个点,那这剩下这个我就不测了啊,现在这个option呢,我们这块说到啊,又给它加了一些方法,这是11的一个特性啊,其实就加了这一个。这都是齐天这个前面这个版本加的啊。
我来说两句