还在用if(obj!=)做非空判断?带你快速上手Optional实战性理解( 二 )
Person person=new Person;person.setAge(2);Optional.ofable(person).get;复制代码
2.3 Optional.isPresent方法(判读是否为空)isPresent方法就是会返回一个boolean类型值 , 如果对象不为空则为真 , 如果为空则false源码:
public boolean isPresent {return value != ;}复制代码
简单的实例展示:
Person person=new Person;person.setAge(2);if (Optional.ofable(person).isPresent){//写不为空的逻辑System.out.println("不为空");}else{//写为空的逻辑System.out.println("为空");}复制代码
2.4 Optional.ifPresent方法(判读是否为空并返回函数)
这个意思是如果对象非空 , 则运行函数体源码:
public void ifPresent(Consumer super T> consumer) {//如果value不为空 , 则运行accept方法体if (value != )consumer.accept(value);}复制代码
看实例:
Person person=new Person;person.setAge(2);Optional.ofable(person).ifPresent(p -> System.out.println("年龄"+p.getAge));复制代码
【还在用if(obj!=)做非空判断?带你快速上手Optional实战性理解】如果对象不为空 , 则会打印这个年龄 , 因为内部已经做了NPE(非空判断) , 所以就不用担心空指针异常了
2.5 Optional.filter方法(过滤对象)filter方法大致意思是 , 接受一个对象 , 然后对他进行条件过滤 , 如果条件符合则返回Optional对象本身 , 如果不符合则返回空Optional源码:
public Optional filter(Predicate super T> predicate) {Objects.requireNon(predicate);//如果为空直接返回thisif (!isPresent)return this;else//判断返回本身还是空Optionalreturn predicate.test(value) ? this : empty;}复制代码
简单实例:
Person person=new Person;person.setAge(2);Optional.ofable(person).filter(p -> p.getAge>50);复制代码
2.6 Optional.map方法(对象进行二次包装)map方法将对应Funcation函数式接口中的对象 , 进行二次运算 , 封装成新的对象然后返回在Optional中源码:
public Optional map(Function super T, ? extends U> mapper) {Objects.requireNon(mapper);//如果为空返回自己if (!isPresent)return empty;else {//否则返回用方法修饰过的Optionalreturn Optional.ofable(mapper.apply(value));}}复制代码
实例展示:
Person person1=new Person;person.setAge(2);String optName = Optional.ofable(person).map(p -> person.getName).orElse("name为空");复制代码
2.7 Optional.flatMap方法(Optional对象进行二次包装)
map方法将对应Optional< Funcation >函数式接口中的对象 , 进行二次运算 , 封装成新的对象然后返回在Optional中源码:
public Optional flatMap(Function super T, Optional> mapper) {Objects.requireNon(mapper);if (!isPresent)return empty;else {return Objects.requireNon(mapper.apply(value));}}复制代码
实例:
Person person=new Person;person.setAge(2);Optional
2.8 Optional.orElse方法(为空返回对象)常用方法之一 , 这个方法意思是如果包装对象为空的话 , 就执行orElse方法里的value , 如果非空 , 则返回写入对象源码:
public T orElse(T other) {//如果非空 , 返回value , 如果为空 , 返回otherreturn value != ? value : other;}复制代码
实例:
Person person1=new Person;person.setAge(2);Optional.ofable(person).orElse(new Person("小明", 2));复制代码
2.9 Optional.orElseGet方法(为空返回Supplier对象)
这个与orElse很相似 , 入参不一样 , 入参为Supplier对象 , 为空返回传入对象的.get方法 , 如果非空则返回当前对象源码:
public T orElseGet(Supplier extends T> other) {return value != ? value : other.get;}复制代码
实例:
Optional> sup=Optional.ofable(Person::new);//调用get方法 , 此时才会调用对象的构造方法 , 即获得到真正对象Optional.ofable(person).orElseGet(sup.get);复制代码
说真的对于Supplier对象我也懵逼了一下 , 去网上简单查阅才得知 Supplier也是创建对象的一种方式,简单来说 , Suppiler是一个接口 , 是类似Spring的懒加载 , 声明之后并不会占用内存 , 只有执行了get方法之后 , 才会调用构造方法创建出对象 创建对象的语法的话就是Supplier supPerson= Person::new;
需要使用时supPerson.get
即可
2.10 Optional.orElseThrow方法(为空返回异常)
这个我个人在实战中也经常用到这个方法 , 方法作用的话就是如果为空 , 就抛出你定义的异常 , 如果不为空返回当前对象 , 在实战中所有异常肯定是要处理好的 , 为了代码的可读性源码:
public
- 看不上|为什么还有用户看不上华为Mate40系列来看看内行人怎么说
- 麒麟|荣耀新款,麒麟810+4800万超清像素,你还在犹豫什么呢?
- 国产手机|国产手机新品频发,果粉们你们还能忍得住吗?
- 无国界|嘴上说着支持华为,却为苹果贡献了2000亿!还真是科技无国界啊?
- 减重|快看!奇瑞蚂蚁都减重了 那你还焦虑什么?
- 二维码|村网通?澳大利亚一州推出疫情追踪二维码 还考虑采用人脸识别和地理定位
- 手机|iPhone12 Pro居然比mini还好卖?网友:24期免息起作用了!
- 拍照|iPhone12还没捂热13就曝光了,屏幕、信号、拍照均有升级!
- 屏幕|苹果iPhone12屏幕不仅发白,还绿的你发慌,用户:环保绿
- 月入|一上网,感觉网上每个人都是月入过万,到底是错觉还是你out了?